我有一个与ng-repeat列表相对应的Bootstrap模态。我想从其父级(包含模式)访问ng-repeat范围数据。我这样做是为了在列表上单击模式按钮时,来自JSON的相应数据会出现在模式中。

我发现有两种方法可以做到这一点,我想知道哪种方法最好?

方法1
视图:

<li ng-init="myFunction(item,$parent)" ng-repeat="item in data.webapps_1.items>


控制器:

 $scope.myFunction = function(item,parent){
        parent.selected=item.counter-1;
    };


方法2检视:

<li ng-init="$parent.selected=item.counter-1" ng-repeat="item in data.webapps_1.items>


控制器中什么也没有。

我已经在Angular ngInit文档中阅读到


  ngInit的唯一适当用法是为特殊属性添加别名
  如下面的演示所示。除了这种情况,您还应该
  使用控制器而不是ngInit来初始化作用域上的值。


但是ngRepeat的特殊属性列表不包括$ parent。

那么,哪种方法更好呢?在控制器或ngInit指令中包含表达式$parent.selected=item.counter-1

提前致谢

最佳答案

只要您保持一致,这两种方法中的任何一种都可以。虽然取决于应用程序的规模。

IMO如果应用程序很大,则需要使用功能方式,以更好地遵循脱钩和关注点分离(http://victorblog.com/2013/03/18/angularjs-separation-of-concerns/)的整个MVC哲学。

ng-init="myFunction(item,$parent)"


这是一个更好的结构,因为您希望将大部分业务逻辑保留在javascript控制器中,而不是在视图中。

10-01 10:40