【问题标题】:Two way bindings trigger 10 digest() iteration reached两种方式绑定触发 10 次 digest() 迭代
【发布时间】:2016-08-09 19:34:27
【问题描述】:

我在使用角度绑定时遇到了一些问题,而且我对它不是很有经验。我将在这里发布所有相关的问题。 这是一些 angularjs 代码片段,触发了 10 个 digest() 循环。我发现了一些类似的帖子,原因是在 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:如果我不更新基本数组,为什么会出现“digest() aborted”错误?如何将过滤后的数组直接传递给计时变量中的组件?

Q2:为什么dailyTimekeepingCtrl.selectedDay更新后组件中的day变量没有更新?

【问题讨论】:

    标签: javascript angularjs angularjs-digest two-way


    【解决方案1】:

    我通过使用 lodash memoize 函数来使用现金结果解决了这个问题。虽然我宁愿不使用外部库,但要更改算法,我仍然对此感到满意。

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2015-05-07
      • 2016-12-07
      • 2016-07-21
      • 2016-08-15
      • 2013-09-19
      相关资源
      最近更新 更多