订阅不是函数错误
Subscribe is not a function error
我正在尝试订阅来自服务的可观察对象,它构建时没有错误,但在浏览器中查看时出现错误 "this.service.getBanners(...).subscribe is not a function"。
服务:
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;
}
}
组件:
import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { BannerService } from './../banner/banner.service';
@Component({
selector: '.banner',
templateUrl: './banner.component.html',
styleUrls: ['./banner.component.sass'],
encapsulation: ViewEncapsulation.None
})
export class BannerComponent implements OnInit {
banners: any[];
constructor(private bannerService: BannerService){
}
ngOnInit() {
this.bannerService.getBanners().subscribe(banners => this.banners = banners);
}
}
知道我做错了什么吗?
您应该return一个可观察对象,而不是return一个数组:
对于Angular <= 5.x.x
getBanners(): Observable<any[]> {
return Observable.of(this.banners);
}
对于Angular>=6.x.x
getBanners(): Observable<any[]> {
return of(this.banners);
}
有几件事需要解决。
您声明函数 getBanners() return 是一个 Observable,但您 return 是一个数组。因此,将您的 return 语句更改为
return Observable.from(this.banners);
您还需要添加:
import 'rxjs/add/observable/from';
这是不好的做法,会将整个 rxjs 库包含到您的代码中:
import { Observable } from 'rxjs';
只导入你需要的。将上面的替换为
import { Observable } from 'rxjs/Observable';
我正在尝试订阅来自服务的可观察对象,它构建时没有错误,但在浏览器中查看时出现错误 "this.service.getBanners(...).subscribe is not a function"。
服务:
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;
}
}
组件:
import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { BannerService } from './../banner/banner.service';
@Component({
selector: '.banner',
templateUrl: './banner.component.html',
styleUrls: ['./banner.component.sass'],
encapsulation: ViewEncapsulation.None
})
export class BannerComponent implements OnInit {
banners: any[];
constructor(private bannerService: BannerService){
}
ngOnInit() {
this.bannerService.getBanners().subscribe(banners => this.banners = banners);
}
}
知道我做错了什么吗?
您应该return一个可观察对象,而不是return一个数组:
对于Angular <= 5.x.x
getBanners(): Observable<any[]> {
return Observable.of(this.banners);
}
对于Angular>=6.x.x
getBanners(): Observable<any[]> {
return of(this.banners);
}
有几件事需要解决。
您声明函数 getBanners() return 是一个 Observable,但您 return 是一个数组。因此,将您的 return 语句更改为
return Observable.from(this.banners);
您还需要添加:
import 'rxjs/add/observable/from';
这是不好的做法,会将整个 rxjs 库包含到您的代码中:
import { Observable } from 'rxjs';
只导入你需要的。将上面的替换为
import { Observable } from 'rxjs/Observable';