0

まず第一に、私の英語で申し訳ありません。私の問題は:

私はこの簡単なコードを持っています:

<li ng:repeat="item in menu.items" ng:class="getMenuItemClass(item)"> 
<a ng:href="#{{item.url}}">{{item.label}}</a>
</li>

そしてこれは私のgetMenuItemClass:

scope.getMenuItemClass = function(item) {
   console.log(item)
   var hashPath = $location.hashPath || '/';
   if (hashPath === item.url) {
      return 'selected';
   }
   return '';
};

これは準備が整った例です。理由はわかりませんが、実際のアプリケーションでは 3 重になっています。:0 私が間違いを犯している場合、誰かが私に説明できますか?

http://jsfiddle.net/h7yKr/44/

jsfddle を angular の最新バージョンに更新したところ、4 倍になりました。見てください http://jsfiddle.net/h7yKr/46/

明確化のために編集: 問題は、getMenuItemClass() が必要以上に多く呼び出されることです。jsfiddle を開いてブラウザ コンソールを開いて、console.log を確認してください。

4

1 に答える 1

0

digestAngular は、サイクル中に式を複数回評価できるため、関数の実行が何度も発生します。

ここのドキュメントで説明されているように

Angular は $digest ループに入ります。ループは、$evalAsync キューと $watch リストを処理する 2 つの小さなループで構成されています。$digest ループは、モデルが安定するまで反復し続けます。これは、$evalAsync キューが空になり、$watch リストが変更を検出しないことを意味します。

$watch 式は関数であるため、複数回呼び出される可能性があります。

あるいは、 $routeサービスの$routeChangeStartイベントを見てください。このイベントにサブスクライブできます。スコープに変数を作成し、その変数へのバインドを行いますng-class

于 2013-06-25T15:34:37.100 に答える