我有一个包含日期的组件列表(格式为toLocaleString()
) 和其他东西。在它们之上有一个用于创建新组件的组件,其中包含一个表单,其中包含一些使用 Angulars FormBuilder 构建的输入字段。
当我快速输入时,验证会滞后,并且我输入的文本不会立即显示。
我假设 Angular 正在重新渲染所有组件,因为如果我不在其他组件中显示日期,我可以快速输入而不会出现延迟。
有没有办法只重新渲染我正在输入的输入字段,因为所有其他组件都无法更改或无法更改toLocaleString()
问题?
有没有办法只重新渲染我正在输入的输入字段,因为所有其他组件都无法更改
是的,对于不会改变的组件,将这些组件的变更检测策略设置为OnPush
. An OnPush
只有在以下情况下才会检查组件的更改:
- 它的任何输入属性发生变化
- 它触发一个事件(例如,单击按钮)
- 一个可观察的(它是一个输入属性或组件的本地属性)触发一个事件,并且
| async
在模板中与 observable 一起使用(请参阅此答案下方评论中的 plunker)
import {Component, Input, ChangeDetectionStrategy} from 'angular2/core';
@Component({
...
changeDetection: ChangeDetectionStrategy.OnPush
})
还可以考虑通过订阅来监听您输入的更改valueChanges
如果您使用 ngFormControl,Observable Angular 将在您的表单元素上可用。然后您可以使用debounce()
每秒或任何合适的时间范围内仅处理更改:
<input type=text [ngFormControl]="input1Control">
constructor() {
this.input1Control = new Control();
}
ngOnInit() {
this.input1Control.valueChanges
.debounceTime(1000)
.subscribe(newValue => console.log(newValue))
}
See https://stackoverflow.com/a/36849347/215945对于一个正在工作的笨蛋来说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)