【问题标题】:subscribe method not working for observable?订阅方法不适用于可观察?
【发布时间】:2017-09-01 15:04:09
【问题描述】:

我正在尝试创建一个模拟服务,如下所示。 我的服务就像

    import { Injectable } from '@angular/core';
    import { URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { Config } from '../../shared/config/env.config';
import { HttpBaseService } from '../../shared/http-base/http-base.service';
import { ResponseModel } from '../../shared/models/index';
import { InventoryIntake } from './inventoryintake';

@Injectable()
export class InventoryIntakeService {
    list:InventoryIntake[];
    constructor(private http: HttpBaseService) { }

    get(): Observable<ResponseModel<InventoryIntake[]>> {
        this.list=[{
            supplier_name:"atami",
            metric_reference:"55665589",
            date_received:new Date("10-5-2017"),
            date_transferred:new Date("15-5-2017")
        },
        {
            supplier_name:"green bits",
            metric_reference:"4555589",
            date_received:new Date("10-5-2017"),
            date_transferred:new Date("15-5-2017")
        }]
        let response = new ResponseModel<InventoryIntake[]>();
        response.data = this.list;
        console.log("called")
        return Observable.create(response);
    }
}

从我调用的组件开始

    import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { URLSearchParams } from '@angular/http';
import { HttpBaseService } from '../../shared/http-base/http-base.service';
import {InventoryIntakeService} from './inventoryintake.service';
import {InventoryIntake} from './inventoryintake'
@Component({
    moduleId: module.id,
    selector: 'inventory-report',
    templateUrl: './inventoryintake.component.html',
    providers: [ HttpBaseService,InventoryIntakeService]
})

export class InventoryIntakeComponent implements OnInit {
   inventoryintake_list: InventoryIntake[] = [];
    constructor(
        private route: ActivatedRoute, private router: Router,private InventoryIntakeService:InventoryIntakeService) {
    }

    getIntakeList(): void {
        this.InventoryIntakeService.get()
          .subscribe((inventoryintake_list) => {
            this.inventoryintake_list = inventoryintake_list.data;
            console.log(this.inventoryintake_list);
        })
    }

    ngOnInit(): void {
       this.getIntakeList();
    }
}
}

当我这样做时。我收到错误说 .subscribe 不是函数。 我该如何解决这个问题?

如何创建一个返回类型可观察的模拟服务? 问题出在可观察的创建方法上吗?

【问题讨论】:

  • 代码this.InventoryIntakeService.get() 甚至不应该编译。请向我们展示更多组件的代码,包括构造函数。
  • 代码已更新...

标签: angular observable


【解决方案1】:

不要直接在InventoryIntakeService 类上调用方法get()。在构造函数中创建服务实例。

constructor(private inventoryIntakeService: InventoryIntakeService) {}

getIntakeList(): void {
    this.inventoryIntakeService.get()
        .subscribe(inventoryintake_list => {
            this.inventoryintake_list = inventoryintake_list.data;
            console.log(this.inventoryintake_list);
        },
    );
}

【讨论】:

  • 我在构造函数中有它。喜欢构造函数(私有路由:ActivatedRoute,私有路由器:路由器,私有InventoryIntakeService:InventoryIntakeService){}
  • 不是他回答
  • 不要将实例命名为与类相同!!!将其更改为 constructor( private route: ActivatedRoute, private router: Router,private inventoryIntakeService:InventoryIntakeService) { } 并让我知道错误是否仍然存在。 @vishnuprasadkv
【解决方案2】:

我必须从

导入 o​​bservable
 import { Observable } from 'rxjs/rx';

而不是

import { Observable } from 'rxjs/Observable';

然后我必须使用

 observable.of(response)

这解决了我的问题。

【讨论】:

    【解决方案3】:

    Observable.create 期望一个函数作为参数,当观察者订阅 observable 时调用该函数。尝试改用Observable.of,将其传递给您的response

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 2016-06-10
      • 2018-03-24
      • 2017-06-21
      • 2019-07-10
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多