Angular: find parent Objects inside directives
我遇到以下问题:
我想在应用程序的不同位置使用指令,并且不想在每次使用指令时都指定父对象和指令对象。
看看这个plnkr:
http://plnkr.co/edit/yUoXXZVJmoesIQNhoDDR?p=preview
它只是一个存储多级数组的 $scope.data 对象。
1 2 3 4 5 6 7 8 9 | $scope.data= [ {"name":"LEVEL0_A","subitems": [ {"name":"Level1_A","subitems":[{"name":"A"},{"name":"B"}]}, {"name":"Level1_B","subitems":[{"name":"C"},{"name":"D"}]}, ... ... and so on |
还有一个名为deleteItem 的小示例自定义指令,正是这样做的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .directive('deleteItem', function() { return { scope:{ item:'=', parent:'=' }, template: '<ng-transclude></ng-transclude>Delete', transclude:true, controller: function($scope){ $scope.deleteItem=function(currentItem,currentParent){ currentParent.subitems.splice(currentParent.subitems.indexOf(currentItem),1); }; } }; }); |
这里是html模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <body ng-app="myApp"> {{level0.name}} {{level1.name}} -------------------- Name: {{level2.name}} </body> |
我的意思是它可以工作,但实际上我觉得必须有某种方法可以找到项目和父项,而无需手动将它们专门链接到范围。
如果有人能指出我正确的方向,我会非常高兴。
谢谢
马库斯
如果你这样做。
1 2 3 | $scope.deleteItem=function(currentItem,currentParent){ currentParent.subitems.splice(currentParent.subitems.indexOf(currentItem),1); }; |
然后您的指令将依赖于其范围之外的数据结构。这意味着该指令只有在完全遵循该模式时才能删除项目。如果您想对不是来自数组的数据使用删除按钮怎么办?
更好的方法是使用 API 特性
1 2 3 4 5 6 7 8 9 | app.directive('deleteItem', function () { return { scope: { remove: '&deleteItem' }, template: '<ng-transclude></ng-transclude>Delete', transclude: true }; }); |
当用户点击"删除"时,
1 2 3 4 5 6 7 8 9 10 | {{level0.name}} {{level1.name}} -------------------- Name: {{level2.name}} |