【发布时间】:2016-06-26 08:20:21
【问题描述】:
我想在更改输入参数时执行一些操作。假设我有一个 DatePicker 组件,它有一个 type 输入变量,并且我想在更改类型时对另一个 date 变量执行一些操作。该怎么做?
export class DatePicker {
@Input()
date: Date;
@Output()
dateChange = new EventEmitter();
@Input()
set type(type: string) {
if (type === "today") {
this.date = new Date();
this.dateChange(this.date); // because of this change change detector will throw error
}
}
}
错误:检查后表达式已更改。
【问题讨论】:
-
我建议你先做
@Input() date: any;然后处理Input变量 -
this.dateChange(this.date);应该是this.dateChange.emit(this.date);(缺少emit) -
这里有一个应该避免的时间耦合。要求
date设置在type之前。要么将两者合并到一个date: Date | string中,要么将它们放在一个对象中。甚至dateChange也应该已经有一个监听器,听起来最好找到不同的方法。 -
有很多用例是当输入改变时你必须做一些事情,比这个例子更不耦合。但是你不能做任何事情,这是一个问题。还有this与此问题相关的讨论
标签: typescript angular angular2-components angular2-inputs