javascript - 为什么angularjs Digest使用日期获取函数进入无限循环

标签 javascript angularjs

我有一个 DTO 对象,它有一个 Date 参数。我将此 Dto 包装在一个 View 模型对象中,然后我将其属性在我的 View 中绑定(bind)到一个标签。

<label class="form-control">{{controller.ViewModel.Date}}</label>

因此在 View 模型中我有一个 getter。 (我正在使用 TypeScript)

public get Date(): Date {
    return new Date(Date.parse(this.dto.Date));
    //return moment(this.dto.Date).toDate();
}

发出的 JavaScript:

Object.defineProperty(ViewModel.prototype, "Date", {
    get: function () {
        return new Date(Date.parse(this.dto.Date));
    },
    enumerable: true,
    configurable: true
});

我相信原因是因为我在 getter 和 Angular 中创建了一个新的 Date 认为这意味着日期总是新的并且它一直在获取日期直到模型稳定,从而导致无限循环。

angular 为什么要这样做?
为什么一直在调用getter,只调用一次有什么问题吗?
我可以告诉 Angular 只调用一次 getter 并接受它给定的值吗?

最佳答案

如果您的版本足够高,您可以尝试一次性绑定(bind)。 按照此处的说明进行操作:https://docs.angularjs.org/guide/expression#one-time-binding

您的假设基本上是正确的,即 Angular 认为日期总是新的。您正在通过 getter 中的评估更改值,angular 的脏检查和监视触发另一个摘要。

您是否也可以尝试提前解析日期?

关于javascript - 为什么angularjs Digest使用日期获取函数进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441287/

相关文章:

javascript - Angular JS : ng-repeat is not showing value

javascript - 为什么 DocumentFragment 没有 getElementsByName?

javascript - 虽然鼠标按下 JS

javascript - Ajax `appendTo` 替换现有元素

javascript - 在 IE 中使用 JQuery UI 切换时列会调整大小

javascript - Xeditable 不工作 AngularJS

jquery - 无法读取 Angular 数据表中未定义的属性 'aDataSort'

javascript - Ionic/cordova 屏幕方向不起作用

javascript - 我怎么知道连接是否安全?

javascript - 访问 AngularJS + Chrome Apps API 中的工厂属性