Angular 订阅不是一个函数错误

Angular 订阅不是一个函数错误,angular,angular-services,angular-observable,Angular,Angular Services,Angular Observable,我试图订阅一个服务中的可观察对象,它构建时没有错误,但在浏览器中查看时出现错误“this.service.getBanners(…).subscribe不是函数” 服务: import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; @Injectable() export class BannerService { banners: any = ['1','2','3'];

我试图订阅一个服务中的可观察对象,它构建时没有错误,但在浏览器中查看时出现错误“this.service.getBanners(…).subscribe不是函数”

服务:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

@Injectable()

export class BannerService {

    banners: any = ['1','2','3'];

    constructor(
    ) {}

    getBanners(): Observable<any[]> {
        return this.banners;
    }

    setBanners(banners: any[]): void {
        this.banners = banners;
    }

}

你知道我做错了什么吗?

你应该返回一个可观察的,而不是返回一个数组:


有几件事需要解决

  • 声明函数getBanners()返回一个可观察的,但返回一个数组。因此,将您的返回声明更改为

    returnobservable.from(this.banner)

  • 您还需要添加以下内容:

    import 'rxjs/add/observable/from'; 
    
  • 这是一种糟糕的做法,会将整个rxjs库包含在代码中:

    从'rxjs'导入{Observable}

  • 只导入您需要的内容。将上述内容替换为

    import { Observable } from 'rxjs/Observable'; 
    

    谢谢,这修复了错误。我还按照Yakov Fain在其回答中的建议更改了导入,并导入了import'rxjs/add/observable/of'。我有一个带有异步管道的*ngFor,但是当我调用setbanner并更改横幅数组的内容时,它不会更新。谢谢,我最初确实有这样的导入,但我在测试时删除了它,我已将其更改回来。出于某种原因,我在使用Observable.from时遇到了一个错误,因此我将其更改为Sajeetharan建议的Observable.of,并修复了该错误。第2点最近似乎发生了变化,请参见:。没错,我在这里写了关于RxJS 6的博客:
    getBanners(): Observable<any[]> {
        return of(this.banners);
    }
    
    import 'rxjs/add/observable/from'; 
    
    import { Observable } from 'rxjs/Observable';