我有一个正在查看指定集合的功能,并突出显示该集合中存在的项目的复选框。
function highlightFiltersPresentInTransactions(collection, collectionproperty, child) {
var found = false;
angular.forEach(collection, function (filterType) {
if (scope.vm.transactions) {
found = scope.vm.transactions.filter(function (obj) {
if (child) {
return obj[collectionproperty][child] === filterType.name;
} else {
return obj[collectionproperty] === filterType.name;
}
});
}
if (found) {
filterType['has-transaction'] = (found.length > 0);
}
});
}
我能够调用它并且它正确地像这样工作
highlightFiltersPresentInTransactions(scope.filterTypes, 'target', 'type');
highlightFiltersPresentInTransactions(scope.actionTypes, 'transactionType');
我希望能够避免的是检查是否存在需要检查的子元素。
我试图这样调用函数:
highlightFiltersPresentInTransactions(scope.filterTypes, 'target.type');
由于这是一个字符串,因此无法找到该属性。我还尝试创建一个空白的目标对象,然后传递没有引号的target.type。
如何动态地将可能有或没有子属性的属性传递给我的函数?
答案 0 :(得分:1)
如何将函数引用传递给函数?
highlightFiltersPresentInTransactions(scope.filterTypes, function(o) { return o.target.type; });
highlightFiltersPresentInTransactions(scope.filterTypes, function(o) { return o.transactionType; });
这很容易实现:
function highlightFiltersPresentInTransactions(collection, readFn) {
var found = false;
angular.forEach(collection, function (filterType) {
if (scope.vm.transactions) {
found = scope.vm.transactions.filter(function (obj) {
return readFn(obj) === filterType.name;
});
}
if (found) {
filterType['has-transaction'] = (found.length > 0);
}
});
}
如果您不想这样做,那么您必须将字符串target.type
拆分为单独的属性,并以现有方式执行(只是没有显式参数) child
)。