我有一个包含日期(格式为toLocaleString()
)和其他内容的组件列表。在它们之上有一个用于创建新组件的组件,其中包含一个带有一些使用角度形式构建器构建的输入字段的表单。
当我快速输入验证滞后时,我输入的文字不会立即显示。
我认为Angular正在重新渲染所有组件,因为如果我不在其他组件中显示日期,我可以非常快速地键入而不会有滞后。
有没有办法只重新输入我输入的输入字段,因为所有其他组件都无法更改或toLocaleString()
问题?
答案 0 :(得分:5)
有没有办法只重新输入我输入的输入字段,因为所有其他组件都无法更改
是,对于不会更改的组件,请将这些组件的更改检测策略设置为OnPush
。然后,只有OnPush
组件才会检查是否有更改
| async
在模板中使用了observable(参见下面评论中的plunker) import {Component, Input, ChangeDetectionStrategy} from 'angular2/core';
@Component({
...
changeDetection: ChangeDetectionStrategy.OnPush
})
如果使用ngFormControl,还可以考虑通过订阅表单元素上的valueChanges
Observable Angular,来监听输入的更改。然后,您可以使用debounce()
仅每秒处理更改或适当的时间范围:
<input type=text [ngFormControl]="input1Control">
constructor() {
this.input1Control = new Control();
}
ngOnInit() {
this.input1Control.valueChanges
.debounceTime(1000)
.subscribe(newValue => console.log(newValue))
}
请参阅https://stackoverflow.com/a/36849347/215945了解有效工作人员。
答案 1 :(得分:2)