Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Angular 8中的子组件与父组件之间通信_Node.js_Angular_Typescript_Ecmascript 6_Angular8 - Fatal编程技术网

Node.js 在Angular 8中的子组件与父组件之间通信

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

我正试图与我的父控制器通信,告知已在其子组件中添加了新项。我知道为此我必须使用@Output和event发射器,我正在使用它们,但它似乎不起作用。还有其他方法可以做到这一点吗?

是的,有。您可以创建一个“服务”,并让多播可观察/主题(例如BehavioralSubject)推送新值

这里有一个很好的起点(顺便说一句,也可以查看其他方法):


您可以使用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();
}