为什么angularjs摘要使用日期获取函数进入无限循环
Why does angularjs Digest go into infinite loop with date getter function
我有一个DTO对象,它有一个Date参数。我将这个Dto包装在视图模型对象中,然后在视图中将其属性绑定到标签。
<label class="form-control">{{controller.ViewModel.Date}}</label>
在视图模型中,我有一个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一次并接受它给出的值吗?
如果您的版本足够高,可以尝试一次性绑定。请按照此处的说明进行操作:https://docs.angularjs.org/guide/expression#one-时间绑定
你基本上是对的,你认为angular认为日期总是新的。您正在更改getter中的评估值,angular的脏检查和监视会触发另一个摘要。
你能不能试着提前分析一下日期?
我找到了一种方法,如下所示:
只张贴打字稿,因为它更可读:
public DisplayDate: string = new Date(Date.parse(this.dto.TxDate)).toLocaleDateString();
public get TxDate(): Date {
let txDate = new Date(Date.parse(this.dto.TxDate));
if (this._txDate === null && this._txDate != txDate)
this._txDate = txDate;
return this._txDate;
}
public set TxDate(value: Date) {
this.dto.TxDate = value.toISOString();
this._txDate = value;
this.DisplayDate = this._txDate.toLocaleDateString();
}
private _txDate: Date = null;
这似乎给了我所需要的。显示日期被绑定到一个可见的标签,这样我就可以获得我想要的显示格式,TxDate被绑定到隐藏的表单日期选择器控件。我可以用ISO8601格式保存我的Dtodate。
相关文章:
- 使用jQuery来foreach iframe-src,并通过函数获取ID和操作
- Javascript函数获取元素内容
- 从Javascript函数获取字符串
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- 从 JavaScript 函数获取 NaN 尝试多次获取相同的数据
- 从 JS 函数获取 PHP 中的值
- 如何用一个函数获取所有javascript变量
- Javascript-函数获取数组元素参数未定义/为null
- 从回调函数获取xhr状态
- 有没有一种方法可以让watch函数获取被监视文件的名称
- 从JQuery到Javascript函数获取表单对象
- 使用react.js从api函数获取json数据
- 从javascript中的递归函数获取undefined
- 使用sails.js中的beforeConnect函数获取客户端套接字
- 如何通过类名和过滤函数获取属性值
- 从php函数获取值到javascript
- 从外部函数获取参数名称
- 从方法js中的函数获取对象属性
- 使用Jquery.load()函数获取变量和页面片段
- 使用onclick函数获取点击的元素jquery