【发布时间】:2017-12-05 02:17:37
【问题描述】:
我有一个简单的组件:
@Component({
// ...
changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent {
private _items: string[];
@Input()
set items(items) {
console.log('setter of items: ', items); // verify call
this._items = items;
}
onChangeValue(event) {
console.log('on change value', event);
}
}
这是模板:
<div *ngFor="let item of _items">
{{item}}
</div>
<input type='text' (change)='onChangeValue($event)'>
问题:
为什么在 input 元素中更改文本并调用 onChangeValue 函数后调用 setter @Input() set items(..)。
我以为Angular的变化检测策略OnPush会触发@Input() set items(..)函数if and only if父组件传入一个新的项目引用到这个组件。
不过,@Input() set items(..) 也会在输入文本发生变化时触发。
为什么?
【问题讨论】:
-
输入有绑定吗?
-
确实有 - 并且正在工作。
-
复制stackblitz.com 会很有帮助。
标签: angular