我制定了过滤数据的指令。它使用范围:true而不是transclusion。不知何故,它只适用于ng-switch。也许还有其他指令,但我没有尝试过。
我的HTML看起来像这样:
<my-filter source="{{foodArray}}" filter="reaction,category"> // source and filter are properties on the directive scope
<div>
<div class="span3">
<table class="table table-bordered">
<tr data-ng-repeat="item in filters.reaction"> // filters property of directive scope
<td><input type="checkbox" data-ng-model="item.isChecked" data-ng-change="filterCtrl.filterList()"></td>
<td>{{ item.value }}</td>
</tr>
</table>
</div>
</div>
<table>
<tbody>
<tr data-ng-repeat="food in filteredData"> // filteredData object on the directive scope
// interating through filteredData
</tr>
</tbody>
</table>
</my-filter>
这是我的指令及其控制器:
angular.module('myModule', [])
.directive('myFilter', function() {
return {
restrict: 'E',
scope: true,
controller: ["$scope", function ($scope) {
var filterCtrl = this;
$scope.filters = {};
filterCtrl.inputArray = [];
filterCtrl.filterList = function() {
/* some code where tmp array is created */
$scope.filteredData = tmp;
}
}],
controllerAs: 'filterCtrl',
link: function(scope, element, attrs, filterCtrl) {
filterCtrl.inputArray = angular.fromJson(attrs.source);
scope.filteredData = filterCtrl.inputArray;
// ...
}
}
});
FilteredData和过滤器是指令范围的属性。现在,当我移除周围的ng开关时,数据为空。 scope.source属性也可以是数组或对象。当我删除ng开关并给它一个对象作为源它实际上会抛出语法错误:SyntaxError:意外的输入结束 at Object.parse(native) 在Object.fromJson
当我使用数组时它不会抛出。
不知道该怎么做。如果有人遇到这个问题,我很乐意听取你的意见。