【问题标题】:Property 'subscribe' does not exist on type {}类型 {} 上不存在属性“订阅”
【发布时间】:2017-10-22 09:00:29
【问题描述】:

Service.ts

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

    const RELEASES = [
{
  id: 1,
  title: "Release 1",
  titleUrl: "release-1",
  year: "2016"
},
{
  id: 2,
  title: "Release 2",
  titleUrl: "release-2",
  year: "2016"
},
{
  id: 3,
  title: "Release 3",
  titleUrl: "release-3",
  year: "2017"
}

]

   @Injectable()
   export class ReleaseService {
     visibleReleases =[];

     getReleases(){
       return this.visibleReleases = RELEASES.slice(0);
     }

     getRelease(id:number){
       return RELEASES.slice(0).find(release => release.id === id)
     }

   }

Component.ts

   import { Component, OnInit, OnDestroy } from '@angular/core';
   import { ReleaseService } from '../service/release.service';
   import { ActivatedRoute, Params } from '@angular/router';
   import { IRelease } from '../releases/release';

   @Component({
     selector: 'app-details',
     templateUrl: './details.component.html',
     styleUrls: ['./details.component.css']
   })
   export class DetailsComponent implements OnInit {
     private sub: any;
     private release: string[];

     constructor(
       private _releaseService: ReleaseService,
       private route: ActivatedRoute
     ) { }

     ngOnInit() {
       this.sub = this.route.params.subscribe(params => {
           let id = params['id'];
           this._releaseService.getRelease(id).subscribe(release => this.release = release);
       });    
     }

     ngOnDestroy() {
       this.sub.unsubscribe();
     }

   }

IRelease 接口

   export class IRelease {
       id: number;
       title: string;
       titleUrl: string;
       year: string;
   }

我正在尝试在我的 Angular4 应用程序中创建一个“详细信息页面”。我想要的是通过以下代码返回所选项目:

ngOnInit() {
       this.sub = this.route.params.subscribe(params => {
           let id = params['id'];
           this._releaseService.getRelease(id).subscribe(release => this.release = release);
       });    
     }

还有一个错误: 类型 '{ id: number; 上不存在属性 'subscribe'标题:字符串;标题网址:字符串;年份:字符串; }'。

我做错了什么?

【问题讨论】:

  • 那么getRelease 返回什么?通过尝试订阅它,您将其视为可观察的,但它是吗?
  • getRelease() 返回一个点击的版本,然后应该会出现一个“详细信息”页面。在那个“详细信息”页面上,我想显示所选项目/版本的详细信息
  • 但是它会返回那个版本的 observable 吗?因为您的代码暗示您认为它确实如此,并且错误消息非常清楚地告诉您它没有。

标签: javascript angular rxjs observable subscribe


【解决方案1】:

您的ReleaseService#getRelease() 方法返回普通对象,您不需要订阅它。订阅仅适用于可观察对象(有关它们的更多信息,例如here)。

你可以这样做:

ngOnInit() {
    this.sub = this.route.params.subscribe(params => {
        let id = params['id'];
        this.release = this._releaseService.getRelease(id);
    });    
}

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2018-03-25
    相关资源
    最近更新 更多