Я пытаюсь создать общую директиву для фильтрации массива в угловом формате.Как фильтровать массив, если фильтр находится в угловой директиве?
<body ng-controller="MainCtrl">
controller: <input type="text" ng-model="query.name" /> - work<br>
directive: <span filter by="name"></span> - not work
<ul>
<li ng-repeat="item in list | filter:query">{{item.name}}</li>
</ul>
</body>
контроллер и директивы являются:
app.controller('MainCtrl', function($scope) {
$scope.list = [
{id: 1, name:'aaa'},
{id: 2, name:'bbb'},
{id: 3, name:'ccc'}
];
});
app.directive('filter', function() {
return {
scope: {
by: '@'
},
link: function postLink(scope, element, attrs) {
element.append(
'<input type="text" ng-model="query.' + attrs.by + '">');
}
}
});
фильтр в работах контроллер, но фильтр в директиве не делает. Я не знаю, как это исправить.
Решение фиксируется в plunker: http://plnkr.co/edit/WLGd6RPQEwMFRBvWslpt?p=preview
Это очень странный подход к фильтрации. Даже если вы можете динамически добавлять элементы, подобные тому, что вы делаете с помощью 'link',' query.name' никогда не будет разрешаться внутри вашей директивы, потому что вы изолировали свою область (вам нужно будет использовать '$ parent.query.name' , что не является хорошей идеей). – Langdon
Да, это выглядит странно, потому что я упростил его больше, чем было необходимо. Я использовал ссылку, потому что иногда мне нужно создать '