Angular 为什么即使输入不';当使用OnPush策略时,是否不会改变?
目前正试图让我的头脑明白这一点:Angular 为什么即使输入不';当使用OnPush策略时,是否不会改变?,angular,Angular,目前正试图让我的头脑明白这一点: @Component({ selector: 'app-test', template: `value: {{value|json}} <button (click)="setValue()">set</button>`, changeDetection: ChangeDetectionStrategy.OnPush }) export class TestComponent { @Input() name!: strin
@Component({
selector: 'app-test',
template: `value: {{value|json}} <button (click)="setValue()">set</button>`,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class TestComponent {
@Input() name!: string;
value = false;
setValue() {
timer(100)
.subscribe(() => this.value = true);
}
}
@组件({
选择器:“应用程序测试”,
模板:`value:{{value | json}}}set`,
changeDetection:ChangeDetectionStrategy.OnPush
})
导出类TestComponent{
@输入()名称!:字符串;
值=假;
setValue(){
计时器(100)
.subscribe(()=>this.value=true);
}
}
单击按钮不会立即触发重新渲染,但第二次单击按钮会导致视图更新
从组件中删除changeDetection
(或将其设置为ChangeDetectionStrategy.Default
)也会导致在单击按钮后立即重新呈现视图
在这一点上,真正让我困惑的是:
- 为什么在使用
策略时甚至会重新渲染视图?就我所知,这个策略不应该只在OnPush
更改时重新呈现吗@Input
- 为什么单击两次按钮后会重新渲染
这是一篇关于这个主题的好文章点击按钮会触发刷新,因为您正在订阅点击事件。组件内的事件处理程序也会触发要运行的更改检测
第一次它看起来不会刷新,因为您添加了延迟,并且组件刷新发生在值更改之前。有意义。试图将可观察对象更改为(true)的
,这会导致即时重新渲染。非常感谢。