【发布时间】:2015-12-28 07:27:33
【问题描述】:
我在标签集中遇到了过滤器问题。
angular.module('myModule', ['ui.bootstrap']);
angular.module('myModule').controller('ModalController', function($scope) {
$scope.favsLib = [1, 19];
$scope.docsLib = [{
"id": 19
}, {
"id": 23
}];
$scope.checkboxDoc = false;
$scope.favFilter = function (docsLib) {
if ($scope.favsLib.length > 0 && $scope.checkboxDoc == true) {
if ($.inArray(docsLib.id, $scope.favsLib) < 0) return;
}
return docsLib;
}
});
angular.module('myModule').directive('tabDirective', function() {
return {
scope: {
display: '='
},
controller: "ModalController",
restrict: 'AE',
replace: true,
link: function(scope, elm, attrs) {
}
};
});
这是我想要的html:
<div ng-app="myModule" ng-controller="ModalController">
<tabset>
<tab heading="Documents">
<tab-directive display="docsLib"> <input type="checkbox" ng-model="checkboxDoc">favourites
<ul>
<li ng-repeat="doc in docsLib | filter:favFilter">{{doc}}</li>
</ul>
</tab-directive>
</tab>
</tabset>
</div>
如果我将输入框放在标签集之外,则过滤器可以正常工作:
Working outside tabset - jsfiddle
点击复选框过滤结果正确。
但是将输入放在选项卡集中不起作用,因此 ui-bootstrap 可能存在问题。
有人有什么想法吗?谢谢。
【问题讨论】:
-
是的,范围层次结构存在问题,将尽快发布答案。编辑:或者可能不是因为@Capricorn ha 同时已经发布了一个(正确的)答案。顺便说一句,使用对象的替代方法是使用
controllerAssytnax 并将checkboxDoc直接附加到控制器实例,避免范围原型继承和属性阴影的陷阱。 -
顺便说一句,如果您想详细了解幕后发生的事情,请参阅 this great answer 解释它。
标签: angularjs filter angular-ui-tabset