Angular - ChangeDetectionStrategy 和订阅
Angular - ChangeDetectionStrategy and subscription
我是 Angular 的新手,我想了解一些东西。
我有一个我们保留的项目:
changeDetection: ChangeDetectionStrategy.OnPush
所以如果我想保留changeDetection onPush
,我该如何解决这个问题:
我在视图中有一个对象列表,当你将鼠标悬停在一个对象上时,有一个 (mouseover)
函数将 next()
发送到 BehaviourSubject
,我订阅它以获取悬停的对象.
如果我将控制台日志与此订阅放在一起,在控制台中我将在悬停对象时看到更新的对象。
但是如果我的组件中有这样的东西:
...
hoveredObject: ObjectType;
ngOnInit() {
mySubscription.subscribe(s => {
this.hoveredObject = s;
});
}
...
在这种情况下,只有我悬停的第一个值会显示在视图中,而不会显示我悬停的另一个值,如果我删除 onPush changeDetection
.
,这个问题就会得到解决
但是我如何在不删除它的情况下克服它呢?
我知道这是因为对象是一个引用,所以没有检测到变化,
我尝试了类似的东西:
mySubscription.subscribe(s => {
this.hoveredObject = {
id: s.id,
name: s.name
};
但它不起作用,我收到无法读取 undefined
名称的错误,这是因为最初当您不将鼠标悬停在任何内容上时 BehaviourSubject
returns undefined
.
我怎样才能让Angular知道这里有变化并让它更新视图?
在视图中我有一个 div 具有:{{hoveredObject}}
谢谢
OnPush 只有在我们谈论父/子组件通信时才有意义。当子项具有 changeDetection: ChangeDetectionStrategy.OnPush 设置并且父项将对象作为输入传递给子项时。
如果你想在有自己状态的组件中处理事件。最好避免使用 onPush。如果要使用,可以手动使用cdr.markforCheck()手动调用Change detection。
我是 Angular 的新手,我想了解一些东西。
我有一个我们保留的项目:
changeDetection: ChangeDetectionStrategy.OnPush
所以如果我想保留changeDetection onPush
,我该如何解决这个问题:
我在视图中有一个对象列表,当你将鼠标悬停在一个对象上时,有一个 (mouseover)
函数将 next()
发送到 BehaviourSubject
,我订阅它以获取悬停的对象.
如果我将控制台日志与此订阅放在一起,在控制台中我将在悬停对象时看到更新的对象。
但是如果我的组件中有这样的东西:
...
hoveredObject: ObjectType;
ngOnInit() {
mySubscription.subscribe(s => {
this.hoveredObject = s;
});
}
...
在这种情况下,只有我悬停的第一个值会显示在视图中,而不会显示我悬停的另一个值,如果我删除 onPush changeDetection
.
但是我如何在不删除它的情况下克服它呢? 我知道这是因为对象是一个引用,所以没有检测到变化, 我尝试了类似的东西:
mySubscription.subscribe(s => {
this.hoveredObject = {
id: s.id,
name: s.name
};
但它不起作用,我收到无法读取 undefined
名称的错误,这是因为最初当您不将鼠标悬停在任何内容上时 BehaviourSubject
returns undefined
.
我怎样才能让Angular知道这里有变化并让它更新视图?
在视图中我有一个 div 具有:{{hoveredObject}}
谢谢
OnPush 只有在我们谈论父/子组件通信时才有意义。当子项具有 changeDetection: ChangeDetectionStrategy.OnPush 设置并且父项将对象作为输入传递给子项时。
如果你想在有自己状态的组件中处理事件。最好避免使用 onPush。如果要使用,可以手动使用cdr.markforCheck()手动调用Change detection。