Javascript 如何检测Angular2中日期对象的更改?
使用setDate方法修改的日期对象在模板中不会得到更新 在模板中:Javascript 如何检测Angular2中日期对象的更改?,javascript,node.js,date,angular,angular2-template,Javascript,Node.js,Date,Angular,Angular2 Template,使用setDate方法修改的日期对象在模板中不会得到更新 在模板中: <p>{{date | date:'mediumDate'}}</p> 但是当我调用nextDay函数时,模板并没有用新值更新 我能让变更检测工作的唯一方法是: nextDay(){ var tomorrow = new Date(); tomorrow.setDate(this.date.getDate()+1); this.date = tomorrow; } 有
<p>{{date | date:'mediumDate'}}</p>
但是当我调用nextDay函数时,模板并没有用新值更新
我能让变更检测工作的唯一方法是:
nextDay(){
var tomorrow = new Date();
tomorrow.setDate(this.date.getDate()+1);
this.date = tomorrow;
}
有没有更好的方法来完成同样的任务?我认为更改日期变量的引用是正确的方法。根据我们的文件: 默认的更改检测算法通过在更改检测运行期间通过引用比较绑定属性值来查找差异 因此,如果日期引用保持不变,则不会发生任何事情。您需要一个新的日期引用,这就是为什么第二个版本的
nextDay()
可以工作的原因
如果删除格式化管道,您将看到仍然只有第二个版本的
nextDay()
有效 date
管道可能是无状态的,因此需要查看date
输入属性的更改,否则管道将不会重新执行。正如@jhadesdev在他的回答中提到的,因为date
是一个对象,并且只进行角度参考检查,所以需要重置参考(到一个新的/不同的对象)。我刚才在没有管道的情况下对其进行了尝试,结果是一样的。如果更改日期,则不会触发模板更改,只有引用更改才会触发模板更改
nextDay(){
var tomorrow = new Date();
tomorrow.setDate(this.date.getDate()+1);
this.date = tomorrow;
}