2016-05-31 5 views
0

何回もログエントリによって

angular.module('NGTest', [ 
 
]) 
 
.controller('ItemList', ['$scope', function($scope) { 
 
\t console.log("ItemList controller init"); 
 
\t var self = this; 
 
    self.count = 4; 
 
    self.getItems = function() { 
 
    \t console.log("ItemList.getItems() called"); 
 
\t return []; 
 
    } 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="NGTest"> 
 
<div ng-controller="ItemList as lst"> 
 
<select ng-options="value for value in [1,2,3,4,5]" ng-model="lst.count"></select> 
 
<div ng-repeat="item in lst.getItems()">foo </div> 
 
</div> 
 
</div>

呼ばNGリピートのためのリストソースは、あなたが起動時に、lst.getItems()関数が2回呼び出されていることがわかります。なぜ2回ですか?

lst.countの値を変更したときにも呼び出されますが、これはまったく使用されません。 私はAngularJSが賢明ではなく、lst.getItems()のコードはlst.countに依存しないことを理解していますが、デフォルトではそれがないと仮定しています。関数のパラメータで。

答えて

2

なぜ二回

あなたはダイジェストサイクルがどのように動作するかの角度をよく読んでする必要があります。これらのダイジェスト内でスコープが変化すると、各サイクルで最低2つのダイジェストが実行されます。

関数をng-repeatのソースとして使用することはお勧めできません。コントローラにデータを取得し、スコープの配列として表示する渡す

self.items= getItems(); 

function getItems(){ 
    console.log("ItemList.getItems() called"); 
    return []; 
} 

今の機能は一度だけ呼び出されます...コントローラは

ビュー

<div ng-repeat="item in lst.items">{{item}}</div> 
+0

私に私の実際のアプリケーションを初期化するとき、この関数がng-repeatソースにある理由は、このリストが同じコントローラのフォームコントロールの値に依存することです。 – Passiday

+0

ng-repeatで 'filter'を使用し、必要に応じてカスタムフィルタを作成します – charlietfl

+0

これはあまり簡単ではありません。リストはデータベースからhttpで取得します。クライアント側の完全なリストを保持することは選択肢ではありません。 – Passiday

関連する問題