物业&#39;订阅&#39;类型&#39;()=&gt;上不存在可观察到的<任何>&#39;

时间:2017-05-21 00:22:02

标签: angular typescript rxjs observable angular2-services

服务文件

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());
}


}

这里是subscribe方法显示此错误的地方

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(responce=>this.videos=responce);
  }

  }

我有服务文件,我必须打电话给我的api才能获得api&#39; s当我要在其他类中订阅该方法时,我正在调用该服务方法getvideos()然后它显示该属性&#34;订阅&#34;在type()=&gt;上不存在可观察到的

3 个答案:

答案 0 :(得分:48)

您没有调用getVideos方法。您在subscribe的函数引用上调用getVideos而不是返回的值。致电subscribe后致电getVideos()

ngOnInit() {

     this.videoserv.getvideos()
        .subscribe(response => this.videos = response);
}

答案 1 :(得分:2)

ngOnInit() {

   this.videoserv.getvideos()
  .subscribe(responce=> this.videos = responce);
}

您应该在getvideos()服务上调用videoserv方法。 您错过了()getvideos是一种方法,而不是属性。

答案 2 :(得分:1)

但是如果您还想在应用程序的另一个地方(组件、管道等)使用您的服务方法 getvideos()

你可以用 .pipe(map()) 而不是 .subscribe()

ngOnInit() {
    this.videoserv.getvideos().pipe(map(response) => {
         this.videos = response
    }));
}

然后在您想要播放视频的地方使用 .subscribe

   this.videoserv.getvideos().subscribe(response) => {
         this.videos2 = response
    });