我有一个与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控制器中,而不是在视图中。