2016-08-09 4 views
0

私は角度バインディングにいくつかの問題があり、私はあまり経験がありません。私はここにすべての質問を関連づけて投稿します。 ここに10 digest()サイクルに達するトリガされたanglejsコードがあります。私はいくつかの同様の投稿を見つけたので、変更はダイジェスト()で再帰的に実行されますが、私の例では原因を見つけることができません。双方向バインディングは10 digest()反復に達する

<work-timekeepings-day timekeepings="dailyTimekeepingCtrl.timekeepingList | timekeepingDay : dailyTimekeepingCtrl.selectedDay" day="dailyTimekeepingCtrl.selectedDay"></work-timekeepings-day> 

コンポーネント:

var workTimekeepingsDay = TimekeepingsApp.component('workTimekeepingsDay', { 
     templateUrl : 'angular/components/work-timekeepings-day.html', 
     controllerAs: '$workTkDayCtrl', 
     bindings : { 
      timekeepings : '=', 
      day: '=' 
     } 
}); 

HTMLテンプレート:

<div class="row lightgreen-row padding-5 border-rounded" ng-repeat-start="workTk in $workTkDayCtrl.timekeepings"> 
<div class="col-md-4"> <b> {{ workTk.user.firstName + ' ' + workTk.user.lastName }} </b> </div> </div> ... 

フィルタ機能:ここ コードである

var timekeepingDayFilter = TimekeepingsApp.filter('timekeepingDay', function() { 
    return function(timekeepings, filterDay) { 
     var result=[]; 
     angular.forEach(timekeepings, function(timekeeping) { 
      var timekeepingDay = moment(timekeeping.workDay); 
      if (timekeepingDay.isSame(filterDay, 'day')) { 
      result.push(timekeeping); 
      } 
     }); 
     return result; 
    } 

})。

HTMLテンプレート内にフィルタ関数を適用するとエラーは発生しませんが、 'day'変数を含む双方向バインディングは正しく機能していないようです。 「dailyTimekeepingCtrl.selectedDay」を同じ方法でバインドされた別のコンポーネントで更新すると、変更はworkTimekeepingsDayコンポーネントに反映されません。ここ は、コンポーネントテンプレートに適用されるフィルタです:

<work-timekeepings-day timekeepings="dailyTimekeepingCtrl.timekeepingList" day="dailyTimekeepingCtrl.selectedDay"></work-timekeepings-day> 



<div class="row lightgreen-row padding-5 border-rounded" ng-repeat-start="workTk in $workTkDayCtrl.timekeepings | timekeepingDay : day"> 
<div class="col-md-4"> <b> {{ workTk.user.firstName + ' ' + workTk.user.lastName }} </b> </div> </div> .. 

はQ1:私はベース・アレイを更新しておりません場合は、なぜ「ダイジェスト()中止され」エラーが発生していますか?フィルターされた配列をtimekeepings変数でコンポーネントに直接渡すにはどうすればよいですか?

Q2:dailyTimekeepingCtrl.selectedDayが更新された場合、コンポーネントで日変数が更新されないのはなぜですか?

答えて

0

現金からの結果を使用するためにlodash memoize関数を使用してこれを解決しました。私は外部のライブラリを使わず、アルゴリズムを変更することを好みましたが、私はまだこれに満足しています。

関連する問題