Node.js 在Angular 8中的子组件与父组件之间通信
我正试图与我的父控制器通信,告知已在其子组件中添加了新项。我知道为此我必须使用@Output和event发射器,我正在使用它们,但它似乎不起作用。还有其他方法可以做到这一点吗?是的,有。您可以创建一个“服务”,并让多播可观察/主题(例如BehavioralSubject)推送新值 这里有一个很好的起点(顺便说一句,也可以查看其他方法):Node.js 在Angular 8中的子组件与父组件之间通信,node.js,angular,typescript,ecmascript-6,angular8,Node.js,Angular,Typescript,Ecmascript 6,Angular8,我正试图与我的父控制器通信,告知已在其子组件中添加了新项。我知道为此我必须使用@Output和event发射器,我正在使用它们,但它似乎不起作用。还有其他方法可以做到这一点吗?是的,有。您可以创建一个“服务”,并让多播可观察/主题(例如BehavioralSubject)推送新值 这里有一个很好的起点(顺便说一句,也可以查看其他方法): 您可以使用Subject来完成此操作。这是我的博客的参考资料 import { Injectable } from "@angular/core"; impor
您可以使用Subject来完成此操作。这是我的博客的参考资料
import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
@Injectable()
export class MessageService {
private subject = new Subject<any>();
constructor() {}
sendMessage(message: any) {
this.subject.next(message);
}
getData() {
return this.subject.asObservable();
}
}
我尝试使用@Output和eventemitter(加上修改了我的项目),结果成功了。
事实证明,我不需要向事件发射器添加类型。(我创建了
@Output()public namespaceCreated=new EventEmitter();
) “…但它似乎不起作用”
← 请详细说明。“不工作”是什么意思。事件是否正在触发但没有数据?数据是否未更新?到底发生了什么(或没有发生)?是不是计时错误?在createNamespace
中,调用一个服务,然后订阅结果。在订阅中,您正在修改this.namespaces
,然后在其下方发出this.namespaces
。但是由于this.namespaces
修改发生在可观察对象中,因此它是异步发生的,并且发生在值发出之后。也许考虑将发射放在订阅中。结果我不需要向事件发射器添加一个类型……虽然是真的,但我不建议放弃类型,这不应该是任何问题的原因。如果您试图发出一个不匹配的类型化变量(这很有帮助),Typescript(通过IDE,例如VSG代码)会抱怨
private subscription$: Subscription;
public ngOnInit(): void {
this.subscription$ = this.messageervice
.getData()
.subscribe(data => { console.log(data); })
}
public ngOnDestroy(): void {
this.subscription$.unsubscribe();
}