我有兩條指令,一條代表數據列表,另一條代表必要的控件過濾該列表。像這樣的東西..在父指令和子指令之間共享變量
<item-list data-items="items">
<list-filters></list-filters>
</item-list>
我想要做的是有家長指導,在「itemList
」,保持一定的濾鏡對象在它的範圍,然後讓孩子指令直接修改該對象,通過鏈接功能。
這裏有2個指令
app.directive('itemList', function() {
return {
restrict: 'E',
scope: {
items: '='
},
transclude:true,
controller: function($scope){
$scope.filter = {};
$scope.add = function(){
var length = $scope.items.length+1;
$scope.items.push({
id: length,
name: 'item' + length
});
};
},
templateUrl: 'list.html'
};
});
app.directive('listFilters', function() {
return {
restrict: 'E',
templateUrl: 'list-filters.html',
require: '^itemList',
link: function(scope, elem, attr, itemList){
itemList.$watch('items', function(){
scope.items = itemList.items;
});
scope.change = function(item){
console.log('change', item);
itemList.filter = item;
};
scope.filter = itemList.filter; // ?? why can't I do this
}
}
});
我無法弄清楚如何抓住該過濾器對象從itemList
指令,有什麼建議?
http://plnkr.co/edit/mVSoxqpeYhwpMxYJFNwj?p=info
謝謝您的時間,對不起了這麼久纔回到你身邊。這個解決方案有效,但範圍。$ parent可能會導致不一致的結果,取決於它聲明的位置嗎? – rodmjay
如果你的'listFilters'指令總是在'itemList'指令中使用,那麼它是OK的 – Alexei