首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致无限循环的JSData对象属性

导致无限循环的JSData对象属性
EN

Stack Overflow用户
提问于 2016-02-01 08:11:26
回答 1查看 183关注 0票数 0

我有一个需要在后端表示的数据属性,如下所示

代码语言:javascript
复制
YYYY-MM-DD

但是,角度材料日期选择器需要一个日期对象。所以我想我只需要使用一个属性。但是,当我创建一个属性时,它会导致无限递归。

我的JSData模型如下所示。

代码语言:javascript
复制
function BlogFactory (DS) {
  return DS.defineResource({
    name: 'Blog',
    endpoint: 'blog',
    idAttribute: 'slug',
    computed: {
      _publish_at: {
        enumerable: true,
        get: () => {
          if (this.publish_at) {
            return moment(this.publish_at).toDate();
          }
        },
        set: (v) => {
          this.publish_at = moment(v).format('YYYY-MM-DD');
        }
      }
    }
  });
}

我的HTML如下所示。博客是一个博客对象。

代码语言:javascript
复制
  <md-datepicker ng-model="blog._publish_at"
      ng-model-options="{'getterSetter': true}"></md-datepicker>

它会导致此错误。

代码语言:javascript
复制
[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

有人知道怎么解决这个问题吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-04-02 09:49:02

我相信这是因为Angular的脏检查。在每个摘要循环期间,Angular会检查blog._publish_at的当前值是否等于前一个循环中的值,并且因为您使用的是一个ES5获取函数(每次访问该属性时都会调用该函数),所以Angular会在每个摘要循环中看到一个新的Date对象,并因此认为该值正在发生变化。

您可能需要考虑将此特定属性的getter/setter逻辑从模型实例移动到您的视图(控制器/指令),在这种情况下放弃使用ES5 getter/setter。

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

https://stackoverflow.com/questions/35121168

复制
相关文章

相似问题

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