【问题标题】:How to get data from asObservable()如何从 asObservable() 获取数据
【发布时间】:2018-12-25 02:05:45
【问题描述】:

这是我的服务代码,让服务名称设置GetContext

_params: Subject<any> = new Subject<any>();

getParameters(): Observable<SearchContext> {
    return this._params.asObservable();
}

setParameters(search: SearchContext) {
    this._params.next("Test");
}

在另一个组件中,我试图获取参数的值。

this.setGetContext.getParameters().subscribe((data) => {
    console.log(data);
})

这里我没有获取数据,甚至没有触发代码。

【问题讨论】:

    标签: angular observable angular2-observables query-parameters


    【解决方案1】:

    服务:

    public _params: Subject<any> = new Subject<any>();
    setParameters(search: SearchContext) {
      this._params.next({action:'test'});
    }
    

    组件:

    import { Component, OnInit, OnDestroy } from '@angular/core';
    import { Subscription } from 'rxjs';
    import { Your service } from 'service_route'
    
    export class YourComponent implements OnInit {
        public subscription: Subscription;
    
        constructor(private _serv: YourService) {}
    
        ngOnInit() {
           this.handleSubscriptions();
        }
        public handleSubscriptions() {
          this.subscription = this._serv._params.subscribe(
            action => {
                console.log(action);
            }
          )
        }
    }
    

    现在你可以调用你的服务函数,每次你调用它你的组件都会 console.log 'test'

    【讨论】:

    • 你是在调用 _serv.setParameters() 吗?
    • 问题控制台语句根本没有触发
    • 请问你能回答我的问题吗?只有在调用 setParameters() 服务函数时才会触发控制台语句。这是我通常的工作方式,从来没有遇到过这个问题。我将此订阅用于多种功能,例如侧边栏(打开和关闭它)通知咆哮等等。确认您是否调用了该函数,如果调用了,我将检查代码是否有误。谢谢
    • 感谢它的工作...我真的忘记分配 tge 值
    【解决方案2】:

    你可以这样做:

    您的服务:

    import { Observable } from "rxjs/Observable";
    import { BehaviorSubject } from 'rxjs/BehaviorSubject';
    import { distinctUntilChanged, map } from 'rxjs/operators';
    
    private _paramSubject = new BehaviorSubject<any>({} as any);
    public _params = this._paramSubject.asObservable().pipe(distinctUntilChanged());
    
    setParameters(search: SearchContext) {
        this._paramSubject.next("Test");
    }
    

    在组件中:

    setParameters(<YOUR OBJECT>)
    service._params.subscribe(data => {console.log(data)});
    

    【讨论】:

    • 这是有效的,当它是 BehaviourSubject 并且当它是 Subject 时不起作用
    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2021-02-10
    • 2023-03-26
    • 2018-02-22
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多