JSData对象属性导致无限循环

时间:2016-02-01 00:11:26

标签: angularjs angular-material jsdata js-data-angular

我有一个数据属性需要在后端像这样

表示
YYYY-MM-DD

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

我的JSData模型看起来像这样。

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看起来像这样。博客是博客对象。

  <md-datepicker ng-model="blog._publish_at"
      ng-model-options="{'getterSetter': true}"></md-datepicker>

导致此错误。

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

有谁知道如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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