【发布时间】:2020-07-14 16:54:36
【问题描述】:
我认为实验源于我有时需要为我的 Angular 组件的输出添加和删除函数的情况。 这是例子
父组件将只包含子组件<my-component>的输出函数。
父组件
class ParentComponent{
myOutputFunction = null;
setOutputFunction() {
this.myOutputFunction = () => {
// do something
};
}
removeOutputFunction() {
this.myOutputFunction = null;
}
}
父组件模板
<my-component (someOutput)="myOutputFunction($event)"><my-component>
子组件MyComponent 内部将有输出someOutput。这也将作为一个问题,如何检测父母何时决定执行removeOutputFunction() 并可能订阅该事件并对其做出反应。
MyComponent 子组件
class MyComponent {
@Output() someOutput = new EventEmitter();
ngOnInit(): void {
// At this point we can see if there are any observers to someOutput
if(this.someOutput.observers.length > 0) {
console.log('YEY we have a set output method from ParentComponent to MyComponent`s attribute');
} else {
console.log('We have no attribute defined');
}
}
}
在ngOnInit() 中,我们可以检查我们是否已编码(someOutput)="myOutputFunction($event)"。
所以,结论。
有没有办法监听(订阅)将 someOutput 从父级从 () => // do something 值更改为 null 值。
当我登录 this.someOutput.observers 时,我得到了订阅者数组。
我可以以某种方式使用this.someOutput 作为 EventEmitter 来到达该实验所指向的位置吗?
谢谢
【问题讨论】:
-
您的问题似乎令人困惑。您能否添加您正在寻找的实际解决方案的简单简短说明。
-
这里的问题是如果你有
(myEvent)="myHandler()",子组件总是会看到一个监听器,即使myHandler是空的。除了在 null 和函数之间切换底层事件处理程序之外,您是否愿意接受其他方法? -
@PushprajsinhChudasama 我不知道如何解决这个问题。因为正如 Kurt Hamilton 所说,无论我对
myOutputFunction做什么,子组件总是有一个监听器。 @KurtHamilton,我愿意接受任何建议,只要我可以在我的子组件中注册我没有订阅者并且只需在子组件的其他逻辑中删除对该事件的订阅 -
@MarioPetrovic 一个问题 - 当父组件摆脱该功能时是否不需要重新渲染子组件?
-
@saglamcem 不,我只需要一个子钩子来响应该函数的父更改,以便我可以做一些更改(不在示例中,但我的情况是我想删除事件侦听器在我的图书馆)
标签: angular typescript rxjs angular-components angular9