我正在尝试将变量和函数传递给hot-column指令,该指令是ngHandsontable.js的一部分,其中我正在使用ng-repeat。在下面的示例中,DATEFORMAT
是一个全局变量,getDropdownOptions
是与tableMetaData
相同的$ scope中的函数,它在热列指令中被识别。
<hot-table
data-settings="{colHeaders: colHeaders, afterChange: afterChange, columnSorting: true, sortIndicator: true, manualColumnResize: true, wordWrap: false}"
data-rowHeaders="true"
data-dataRows="tableData">
<hot-column
data="{{tCol.DATA}}"
data-ng-repeat="tCol in tableMetaData | orderBy: 'SEQUENCE' | filter: {DISPLAY: true}"
data-type="{{tCol.TYPE}}"
data-date-format="DATEFORMAT"
data-source="getDropdownOptions"
data-read-only="{{tCol.READONLY}}"
data-title="'{{tCol.TITLE}}'">
</hot-column>
</hot-table>
问题是该指令获取变量并且函数为undefined。发生这种情况是因为在热列的链接中它循环遍历所有属性并且$ eval是它们。这是相关的代码:
link: function (scope, element, attributes, controllerInstance) {
var column = {};
for (var i in attributes) {
if (attributes.hasOwnProperty(i)) {
if (i.charAt(0) !== '$' && typeof column[i] === 'undefined') {
if (i === 'data') {
column['data'] = attributes[i];
}
else {
if (i!=='ngRepeat') { // this if is my addition in order to allow ng-repeat
column[i] = scope.$eval(attributes[i]); // this line is part of the original directive
}
}
}
}
}
}
我试图将该函数排除在'$ eval'之外,但只传递了字符串。与变量相同。
我该如何做到这一点?
修改: 我已经设法通过在handontable代码中使用eval而不是$ eval来传递变量。这仍然没有解决如何传递函数。这是eval修复:
else {
if (i!=='ngRepeat') {
if (i == 'dateFormat') {
column[i] = eval(attributes[i]);
} else {
column[i] = scope.$eval(attributes[i]);
}
}
}