所以,我得到了以下通用结构:
<list-item ng-repeat="item in collection">
<remove-item>
<a ng-click="remove()">delete</a><!-- this is inside the view.html -->
</remove-item>
</list-item>
我需要一种正确的方法,当触发时,remove()函数会删除所单击的完整父级。
我得到了这个工作,在指令上调用scope.parent()。parent().... remove(),但是这样做很糟糕= P
有更好的方法吗? (确定有)。
请不要介意这个蹩脚的问题。我是AngularJs的新手,我正在努力解决这个问题。 =(
提前谢谢。
答案 0 :(得分:0)
有几种方法可以避免Angular中的$scope.$parent.$parent ...
问题。如果您正在使用范围,则应该在范围的子属性中放置您希望子级访问的任何回调或属性。例如,在父指令中,使用$scope.api.remove = function() {...}
而不是$scope.remove = function() {...}
。然后你可以在子指令中调用它,如下所示:
<list-item ng-repeat="item in collection">
<remove-item>
<!-- remove() is bound to $scope.api rather than directly to $scope -->
<a ng-click="api.remove()">delete</a>
</remove-item>
</list-item>
执行此操作的另一种方法是重构代码以使用控制器而不是范围。这似乎已成为首选的做事方式,而Angular 2的工作方式也是如此。 v1.5.0中新的component功能使这种模式变得特别容易。我没有给出详细的示例,但您可以详细了解此模式here,以及有关组件here的更多信息。