0

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

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!

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

4

1 回答 1

0

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

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

于 2016-04-02T01:49:02.290 回答