【问题标题】:Pass data from component to service via observables通过可观察对象将数据从组件传递到服务
【发布时间】:2019-10-01 22:36:36
【问题描述】:

我需要将信息从组件 A 发送到服务,在那里工作,然后将其发送到组件 B。A 和 B 是兄弟姐妹。我需要组件 A 来触发它,以便在组件 B 上获得所需的结果。

我正在尝试使用带有 rxjs 的 observable 来实现这一点(我不知道这是否是最好的方法或做法)

目前我的组件 A 如下所示:

import { Observable } from "rxjs/Rx"
import { of, Subscription } from 'rxjs';
import { SoporteService    } from '../soporte/services/soporte.service';

public constructor( public _observable: Subscription, (...)

let observable = of (id_estado)
this._observable = observable.subscribe( (x:number) => {
} )

尽管我完全不确定我应该如何接收服务上的数据,或者我为什么不使用 .next

当我保存上一个组件时,我得到了

Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[Component A]

我怎样才能发送这样的数据?

【问题讨论】:

    标签: javascript angular rxjs


    【解决方案1】:

    使用当前代码,您正在尝试注入一个可观察对象作为依赖项。相反,您应该将服务注入到组件 A 和 B 中,并在服务中提供组件 A 调用的方法以及组件 B 可以订阅的 ObservableEventEmitter

    类似的东西;

    中介服务

    @Injectable({
        providedIn: 'root'
    })
    export class MyService {
    
        public eventEmitter: EventEmitter<any> = new EventEmitter<any>();
    
        public methodThatCompnentACanCall(someValue: string) {
            this.eventEmitter.emit(someValue);
        }
    }
    

    组件 A 和 B 的构造函数

    public constructor(private mediator: MyService)

    您可能需要搜索“中介者模式”以获取更多信息。

    【讨论】:

    • 那么,该服务将有一个方法,我通常将其称为传递一个值,然后在组件 B 订阅的同一方法上调用一个事件发射器?这是正确的吗?
    • 是的 :) EventEmitter 当然需要是公共字段,然后在组件A调用的方法中调用eventEmmitter.emit(someValue)方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2018-02-23
    • 1970-01-01
    • 2019-03-15
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多