从child指令中删除ng-repeat项的正确方法

时间:2016-02-14 00:57:59

标签: javascript angularjs angularjs-directive

所以,我得到了以下通用结构:

<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的新手,我正在努力解决这个问题。 =(

提前谢谢。

1 个答案:

答案 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的更多信息。