我使用这个指令将html表导出到csv:
myApp.directive('exportToCsv', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
function stringify(str) {
return '"' + str.replace(/^\s\s*/, '').replace(/\s*\s$/, '').replace(/"/g, '""') + '"';
}
element.bind('click', function (e) {
var table = document.querySelector("#targetTable");
/* var table = e.target.nextElementSibling;*/
var csvString = '';
for (var i = 0; i < table.rows.length; i++) {
var rowData = table.rows[i].cells;
for (var j = 1; j < rowData.length; j++) {
if (rowData[j].innerHTML.indexOf('<a href') > -1) {
var ele = angular.element(rowData[j]);
for (var k = 0; k < ele[0].childNodes.length; k++) {
if (ele[0].childNodes[k].tagName == 'A') {
csvString = csvString + stringify(ele[0].childNodes[k].innerText) + ",";
}
}
} else if (rowData[j].innerHTML.indexOf('<em') > -1 || rowData[j].innerHTML.indexOf('<strong>') > -1) {
var ele = angular.element(rowData[j]);
csvString = csvString + stringify(ele[0].textContent) + ",";
} else {
csvString = csvString + stringify(rowData[j].innerHTML) + ",";
}
}
csvString = csvString.substring(0, csvString.length - 1);
csvString = csvString + "\n";
}
console.log(csvString);
csvString = csvString.substring(0, csvString.length - 1);
var dl = new Blob([csvString], { type: 'application/csv;base64' });
saveAs(dl, "export.csv")
});
}
}
});在这段代码中真正困扰我的是“var table = document.querySelector("#targetTable");”,因为它不允许我在同一个html视图上重用该指令两次。
我试图弄清楚如何将目标id作为参数传递给指令函数,这样我就可以在标记中使用它,如下所示:
<button export-to-csv type="button" id-parameter="targetTable1" style="background-color: Transparent; color:green">Export:CSV</button >
<button export-to-csv type="button" id-parameter="targetTable2" style="background-color: Transparent; color:green">Export:CSV</button >在Angularjs指令中这是可能的吗?
发布于 2018-02-18 00:14:21
根据我对您问题的理解,您希望在指令中传递一个值:
myApp.directive('exportToCsv', function () {
return {
restrict: 'A',
scope : {
idParameter : '@' // pass value to the directive
},
link: function (scope, element, attrs) {
function stringify(str) {
return '"' + str.replace(/^\s\s*/, '').replace(/\s*\s$/, '').replace(/"/g, '""') + '"';
}
element.bind('click', function (e) {
var uniqueId = '#'+scope.idParameter; // <--- you can use it here
var table = document.querySelector(uniqueId);
/* var table = e.target.nextElementSibling;*/
var csvString = '';
for (var i = 0; i < table.rows.length; i++) {
var rowData = table.rows[i].cells;
for (var j = 1; j < rowData.length; j++) {
if (rowData[j].innerHTML.indexOf('<a href') > -1) {
var ele = angular.element(rowData[j]);
for (var k = 0; k < ele[0].childNodes.length; k++) {
if (ele[0].childNodes[k].tagName == 'A') {
csvString = csvString + stringify(ele[0].childNodes[k].innerText) + ",";
}
}
} else if (rowData[j].innerHTML.indexOf('<em') > -1 || rowData[j].innerHTML.indexOf('<strong>') > -1) {
var ele = angular.element(rowData[j]);
csvString = csvString + stringify(ele[0].textContent) + ",";
} else {
csvString = csvString + stringify(rowData[j].innerHTML) + ",";
}
}
csvString = csvString.substring(0, csvString.length - 1);
csvString = csvString + "\n";
}
console.log(csvString);
csvString = csvString.substring(0, csvString.length - 1);
var dl = new Blob([csvString], { type: 'application/csv;base64' });
saveAs(dl, "export.csv")
});
}
}
});如果你有更多的疑问,请在你的评论中告诉我。
https://stackoverflow.com/questions/48842700
复制相似问题