Angular 角度rxjs主题和订阅不工作

Angular 角度rxjs主题和订阅不工作,angular,Angular,在我的服务中,我创建了一个可观察的组件,我将在另一个组件中使用它 import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; import { Router } from '@angular/router'; import { HttpClient, HttpErrorResponse } from '@angular/common/http'; @Injectable() expor

在我的服务中,我创建了一个可观察的组件,我将在另一个组件中使用它

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Router } from '@angular/router';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';


@Injectable()
export class ApiHandlerService {

    modalObject = new Subject<any>();

    constructor(
        private router: Router,
        private http: HttpClient,
    ) {}

    responseHandler(response) {
        if (response.success) {
            const obj = {
                exception: false,
                payload: response.payload
            };
            this.modalObject.next(obj);
            return obj;
        } else {
            const obj = {
                exception: true,
                message: response.exception.message,
                segNum: response.exception.seqNum
            };
            this.modalObject.next(obj);
            return obj;
        }
    }

    errorHandler(err) {
        if (err instanceof HttpErrorResponse) {
            if (err.status === 401) {
                this.router.navigate(['/app-login']);
            }
        }
    }

}
所以您可以看到,当我订阅时,我只是在此时尝试console.log订阅值。这似乎不起作用,而且我对可观察事物有点太陌生了,不知道出了什么问题

  • 尝试使用视图中服务返回的值,这将确保从“当前组件”正确调用服务
  • 在服务本身中,放置一些日志语句以确保达到可返回的代码 一般来说,这段代码是有效的

    ngOnInit() {
        this.allSpecies = this.birdService.getAllSpeciesFromFirebase();
        this.specieSub = this.allSpecies.subscribe(data => console.log(data));
    }
    
    这里,“所有物种”是一个可观察的物种,specieSub是一个订阅。根据服务返回数据的方式,数据将被记录为数组或包装对象

    既然主体是可观察的超类,它也应该起作用。。无论如何,尝试降级以观察自身,并查看所有代码是否工作正常


    发布生成的任何更新或日志

    可能是由于以下原因造成的:

    1.您必须在提供者中添加服务

        @Component({
        selector: 'app-api-handler-modal',
        templateUrl: './api-handler-modal.component.html',
        providers:[ApiHandlerService]
    })
    
  • 当您订阅时,您应该执行service.methodInService().subscribe()操作

    this.apiHandlerService.responseHandler().subscribe(obj=>console.log(obj)); }

  • 构造函数(publicapiHandlerService:apiHandlerService)


  • 是否有任何原因导致服务的
    响应处理器
    功能启动?除非有什么东西使
    Subject.next()
    运行,否则不会发生太多事情。我的所有组件都使用http.get/pull调用响应处理程序。我知道这部分正在工作,否则我将无法在组件模板中获得有效负载,我就是。1。尝试使用视图中服务返回的值,这将确保从“current component”@SandraWillford正确调用服务。您是否能够解决此问题?或者查询的任何更新?@Nitin我不得不暂停此操作,因此没有任何新的进展
        @Component({
        selector: 'app-api-handler-modal',
        templateUrl: './api-handler-modal.component.html',
        providers:[ApiHandlerService]
    })