更新
所以我在preCheckService中创建一个名为getData的函数,我想从其他组件调用它。但由于某种原因,我无法调用该函数,如何使getData公共函数可以从组件中调用
import {Component,Injectable} from '@angular/core'
import {HttpModule, Http} from "@angular/http";
import 'rxjs/add/operator/map'
import Util from './Util';
@Injectable()
export class preCheckService{
u:Util;
mode:string="local";
constructor(private http: Http ){
this.u = new Util();
}
getData(){
var u =this.u.getPreCheckDefinitions(this.mode);
return u();
}
}
import {Injectable} from '@angular/core'
import {HttpModule, Http} from "@angular/http";
import {subscribeOn} from "rxjs/operator/subscribeOn";
export default class Util{
constructor(private http: Http){
}
getPreCheckDefinitions = type =>{
switch (type){
case 'server':
return function getData(){
return this.http.post("server/PreCheck/preCheckDefs.do", {radBusLine : 1}).map(
(res) => res.json()
)
};
case 'local':
return function getData(){
return this.http.get("app/data/preCheckData.json").map(
(res) => res.json()
)
};
}
};
}
我的错误
EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'http' of undefined
TypeError: Cannot read property 'http' of undefined
答案 0 :(得分:1)
为什么不将getData作为服务的方法。?
@Injectable()
export class preCheckService{
u:Util;
mode:string="dev";
constructor(private http: Http ){
this.u = new Util();
this.initialize();
}
getData(){
return this.u.getPreCheckDefinitions(this.mode);
}
}
或者你的getPreCheckDefinition可以改变如下。否则在通话时将不知道“这个”
getPreCheckDefinitions(type){
switch (type){
case 'server':
return this.http.post("server/PreCheck/preCheckDefs.do", {radBusLine : 1}).map(
(res) => res.json()
);
case 'local':
return this.http.get("app/data/preCheckData.json").map(
(res) => res.json()
);
}
}
这样getPreCheckDefinitions将返回一个observable。
答案 1 :(得分:0)
你的错误,
您在以下方法中返回的内容应为
getPreCheckDefinitions(type):Observable<any>{
....
}
为什么要使用两个单独的类来实现此目的。
可能的解决方案可能会建议我的 LIVE DEMO