首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双向绑定触发达到10 digest()迭代

双向绑定触发达到10 digest()迭代
EN

Stack Overflow用户
提问于 2016-08-10 03:34:28
回答 1查看 58关注 0票数 0

我对角度绑定有一些问题,而且我对它没有太多的经验。我将在这里张贴所有的问题,因为它们是相关的。下面是一些angularjs代码,它们触发了10个digest()周期。我发现了一些类似的帖子,原因是digest()中递归地执行了更改,但我在我的示例中找不到原因。下面是代码:

代码语言:javascript
复制
<work-timekeepings-day timekeepings="dailyTimekeepingCtrl.timekeepingList  | timekeepingDay : dailyTimekeepingCtrl.selectedDay" day="dailyTimekeepingCtrl.selectedDay"></work-timekeepings-day>

组件:

代码语言:javascript
复制
var workTimekeepingsDay = TimekeepingsApp.component('workTimekeepingsDay', {
        templateUrl : 'angular/components/work-timekeepings-day.html',
        controllerAs: '$workTkDayCtrl',
        bindings : {
            timekeepings : '=',
            day: '='
        }
});

HTML模板:

代码语言:javascript
复制
<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> ...

过滤函数:

代码语言:javascript
复制
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组件中。以下是组件模板中应用的过滤器:

代码语言:javascript
复制
<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‘错误?如何将过滤后的数组直接传递给timekeepings变量中的组件?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 16:00:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38859043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档