Angularjs ng重复';数组修改时未更新s元素
当我试图在ng上更新我的数组时,单击以更新我的ng repeat指令项:Angularjs ng重复';数组修改时未更新s元素,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,当我试图在ng上更新我的数组时,单击以更新我的ng repeat指令项: <li ng-repeat="itemL1 in mainMenuL1Arr" ng-click="selectL2menu(itemL1.name)"> <i ng-class="getClass(itemL1.icon)"></i> </li> 单击第一级菜单项后,应立即显示具有相应元素的第二级菜单块(通过使用相应值更新数组,见下文)。 这里是我需要在单击时
<li ng-repeat="itemL1 in mainMenuL1Arr"
ng-click="selectL2menu(itemL1.name)">
<i ng-class="getClass(itemL1.icon)"></i>
</li>
单击第一级菜单项后,应立即显示具有相应元素的第二级菜单块(通过使用相应值更新数组,见下文)。
这里是我需要在单击时更新的第二级菜单块:
<li ng-repeat="itemL2 in mainMenuL2CurArr"
class="subMenuElemBlock"
ng-class="{active: itemL2.selected}">
<a href="#">
<i ng-class="getClass(itemL2.icon)"></i>
<span>{{itemL2.name}}</span>
</a>
</li>
单击事件触发时-我的阵列已成功更新。尽管如此,ng repeat指令未更新我的二级菜单(基于更新数组)。我尝试过使用$apply函数(和不使用$apply函数)来解决问题-结果相同(尽管使用$apply错误消息时出现错误:$apply已在进行中)
那么,为什么在ng repeat指令菜单元素上单击未显示时成功更新我的阵列?
我读过相关文章(,),但没有找到任何工作决定。您是否尝试将selectL2Menu功能更改为:
$scope.selectL2menu = function (itemL1name){
$scope.mainMenuL2CurArr = $scope.mainMenuL2Obj[itemL1name];
}
如果看不到更多的控制器代码,就很难确定问题可能是什么。这里是一个简化的例子。我建议你把它和你现有的做个比较 请注意,您不需要调用
$scope.$apply()
,因为ng click
指令将自动为我们执行此操作
HTML:
-
{{itemL1.name}
-
JavaScript:
函数MyCtrl($scope){
$scope.mainMenuL1Arr=[{name:'one'},{name:'two'}];
$scope.mainMenuL2Obj={
一:[{name:'1.1'},{name:'1.2'}],
二:[{name:'2.1'},{name:'2.2'}]};
$scope.mainMenuL2CurArr=$scope.mainMenuL2Obj['one'];
$scope.selectL2menu=函数(itemL1name){
console.log(itemlname);
$scope.mainMenuL2CurArr=$scope.mainMenuL2Obj[itemL1name];
};
}
在数组中添加项后,是否可以尝试生成$scope.$apply()
$scope.array.push({id: 1, name: 'test'});
$scope.$apply();
对我来说效果很好,可能你有插件的另一个功能或类似的功能,那就是阻止作用域应用,在我的情况下,我有一个select2,当在apply字段中选择时,没有触发标记,我找到了你的答案-正是我需要的。问题是,当我试图在两个不同的元素上使用相同的控制器时(换句话说,我错误地使用了同名的ng控制器,试图在两个元素之间共享数据)——这就是为什么更新的数组在它自己的作用域上。非常感谢您在我的问题上花费时间!也谢谢你的小提琴!如果可以的话,我会在这个问题上给你们1票以上的支持票,因为我已经在这个问题上纠缠了这么久。谢谢
$scope.array.push({id: 1, name: 'test'});
$scope.$apply();