使用函数currying

时间:2017-03-07 18:34:11

标签: javascript angular typescript dependency-injection currying

更新

所以我在preCheckService中创建一个名为getData的函数,我想从其他组件调用它。但由于某种原因,我无法调用该函数,如何使getData公共函数可以从组件中调用

预check.service.ts

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

    }

}

Util.ts

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

2 个答案:

答案 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)

你的错误,

  1. 只需将组件注入到构造函数中,就可以在组件之间重用可注入的服务。
  2. 您在以下方法中返回的内容应为

    getPreCheckDefinitions(type):Observable<any>{
      ....
    }
    
  3. 为什么要使用两个单独的类来实现此目的。

  4. 可能的解决方案可能会建议我的 LIVE DEMO