【发布时间】:2019-06-28 17:20:43
【问题描述】:
如果有父组件和子组件,有没有办法在不检查整个组件树的情况下触发子组件中的事件。
import { Component } from '@angular/core'
@Component({
selector: 'my-app',
template: '<b>{{ text() }}</b><br /><app-child></app-child>'
})
export class AppComponent {
text() {
console.log('parent')
return 'parent'
}
}
@Component({
selector: 'app-child',
template: '<b>{{ text() }}</b><span (click)="change()"> | Change</span>'
})
export class ChildComponent {
text() {
console.log('child')
return 'child'
}
change() { }
}
在这里,我希望在子组件中调用 change 方法时,父组件不必检查视图(只需记录“子”而不是“父”和“子”)。
【问题讨论】:
-
听起来你在找onPush。
-
我实际上是在寻找 onPush 的“对立面”。当从父项触发事件时,推送将避免子项中的更改检测。当子级触发事件时,我想避免在父级中检测到更改。
-
抱歉,在快速阅读时误会了。无论如何,这就是 @input/@output 事件发射或单例 service 的用途。
-
我不确定输入/输出绑定或单例服务在这种情况下会有什么帮助。我有一个带有触发许多事件的组件的大型 Angular 应用程序,它在应用程序内很慢,因为每次用户滚动此组件时都会检查整个组件树(使用
(scroll)="")。 -
使用(scroll) 与
NavigationEnd的路由器绑定在一起,因此这是预期的行为。相反,可以使用HostListener直接将事件侦听器附加到 dom 对象,并通过Renderer2处理对 DOM 的更新(假设这可能是您订阅的内容?)但我想这取决于整个情况需要不太清楚。抱歉,帮不上忙。
标签: angular angular2-changedetection