为什么angularjs Digest会使用date getter函数进入无限循环

Joh*_*ohn 5 javascript angularjs

我有一个DTO对象,它有一个Date参数.我将此Dto包装在视图模型对象中,然后我将视图中的属性绑定到标签.

<label class="form-control">{{controller.ViewModel.Date}}</label>
Run Code Online (Sandbox Code Playgroud)

在视图模型中,我有一个吸气剂.(我正在使用TypeScript)

public get Date(): Date {
    return new Date(Date.parse(this.dto.Date));
    //return moment(this.dto.Date).toDate();
}
Run Code Online (Sandbox Code Playgroud)

发出的JavaScript:

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

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

为什么棱角分明这样做?
为什么它一遍又一遍地调用getter,只调用一次有什么问题?
我可以告诉角度只是调用一次吸气剂并接受它给出的值吗?

col*_*ins 3

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

您的假设基本上是正确的,即角度认为日期始终是新的。您正在通过吸气剂和角度的脏检查中的评估来更改该值,并且手表会触发另一个摘要。

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