类型 '() => Observable<any>' 上不存在属性 'subscribe'
Posted
技术标签:
【中文标题】类型 \'() => Observable<any>\' 上不存在属性 \'subscribe\'【英文标题】:Property 'subscribe' does not exist on type '() => Observable<any>'类型 '() => Observable<any>' 上不存在属性 'subscribe' 【发布时间】:2017-10-20 21:09:41 【问题描述】:服务文件
import Observable from 'rxjs/Rx';
import Http,Response from '@angular/http';
import Injectable from '@angular/core';
import 'rxjs/add/operator/Map';
@Injectable()
export class VideoService
private geturl = '/api/videos';
constructor(private _http:Http)
getvideos()
return this._http.get(this.geturl).map((response:Response) =>
response.json()
);
这里是显示这个错误的订阅方法
import VideoService from '../video.service';
import Component, OnInit from '@angular/core';
import Video from '../video';
import Observable from 'rxjs/Observable';
@Component(
selector: 'app-videocenter',
templateUrl: './videocenter.component.html',
styleUrls: ['./videocenter.component.css']
)
export class VideocenterComponent implements OnInit
videos: any;
onselectvideo: Video;
switch: boolean = false
constructor(private videoserv: VideoService)
//console.log(this.videos);
onselect(vid: any)
this.switch = true;
this.onselectvideo = vid;
console.log(vid);
ngOnInit()
this.videos = this.videoserv.getvideos .subscribe((response) =>
this.videos = response;
);
我有一个服务文件,我必须在其中调用我的 api 来获取 api,当我要订阅另一个类中的方法时,我正在调用该服务方法 getvideos() 然后它显示该属性的错误类型 ()=> observable 上不存在“订阅”
【问题讨论】:
另外,switch
是一个受保护的字。您将无法将其用作变量名。
我得到属性 'map' 在类型 'string' 上不存在。在此:返回 this._http.get(this.geturl).map((response:Response) => response.json() );
【参考方案1】:
您没有调用getVideos
方法。您在 getVideos
的函数引用上调用 subscribe
而不是返回值。拨打getVideos()
后拨打subscribe
:
ngOnInit()
this.videoserv.getvideos().subscribe((response) =>
this.videos = response
);
【讨论】:
【参考方案2】:ngOnInit()
this.videoserv.getvideos().subscribe((response) =>
this.videos = response
);
您应该在videoserv
服务上调用getvideos()
方法。
你错过了()
,getvideos
是一个方法而不是一个属性。
【讨论】:
【参考方案3】:但是,如果您还想在应用程序的另一个位置(组件、管道...等)使用您的服务方法 getvideos()
你可以用 .pipe(map()) 代替 .subscribe()
ngOnInit()
this.videoserv.getvideos().pipe(map(response) =>
this.videos = response
));
然后在你想放视频的地方使用.subscribe
this.videoserv.getvideos().subscribe(response) =>
this.videos2 = response
);
【讨论】:
【参考方案4】:this.service.method().subscribe(response)...
每当输入this.service
并出现自动建议时,在建议中,建议方法名称,一旦建议被接受,它只占用不带括号()的方法名称。
this.service.method.subscribe()..
=> 会报错
this.service.method().subscibe()..
=> 正确
【讨论】:
以上是关于类型 '() => Observable<any>' 上不存在属性 'subscribe'的主要内容,如果未能解决你的问题,请参考以下文章
类型 'Observable<any>' 不可分配给类型 'Observable<T>'
类型 'Observable<ArrayBuffer>' 不可分配给类型 'Observable<HttpResponse<User>>'
错误 TS2416 类型 'Observable<APIResponse>' 不可分配给类型 'Observable<User>'
Observable<> 不可分配给类型 Observable<SomeType[]>