Angularjs ng重复';数组修改时未更新s元素

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> 单击第一级菜单项后,应立即显示具有相应元素的第二级菜单块(通过使用相应值更新数组,见下文)。 这里是我需要在单击时

当我试图在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="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();