ng-repeat のディレクティブ項目を更新するために、ng-clickで配列を更新しようとすると:
<li ng-repeat="itemL1 in mainMenuL1Arr"
ng-click="selectL2menu(itemL1.name)">
<i ng-class="getClass(itemL1.icon)"></i>
</li>
selectL2menu()はコントローラーで次のように定義されています。
$scope.selectL2menu = function selectL2menu(itemL1name){
$scope.$apply(function () {
$scope.mainMenuL2CurArr = $scope.mainMenuL2Obj[itemL1name];
});
}
第 1 レベルのメニュー項目をクリックした直後に、対応する要素を含む第 2 レベルのメニュー ブロックが表示されます (対応する値で配列を更新することにより、以下を参照)。これは、クリック時に更新する必要がある第 2 レベルのメニュー ブロックです。
<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 ディレクティブは私の第 2 レベルのメニューを更新しませんでした (配列の更新に基づいています)。私は $apply 関数を使用して (および使用せずに) 試しました - 同じ結果です (ただし、 $apply エラーメッセージが表示されますError: $apply already in progress )。
では、ng-repeat ディレクティブ メニュー要素で表示されないクリックで配列が正常に更新されるのはなぜですか?