angular - 如何将服务注入(inject)函数?

标签 angular typescript

var someObject = {
  func: (http: Http)=>{
    // do something
  }
}

---------------------------------------------

// somewhere in an ng2 module
function injectServices(theObject){

  let services = getServices(theObject.func)

  //inject services into theObject
  ....

}

// return services
function getServices(func: Function){
   // get params' type of func
   let paramTypes = ...
   // get services' singleton
   let singletons = ...

   return singletons;
}

Reflect有没有提供这样的方法让我可以得到参数的函数类型?我如何获得服务类的单例?

场景是我将采用一个实现以下接口(interface)的对象来呈现表单 View ,并且我有一些自定义服务应该在运行时注入(inject)到 $validator、$parser 和 $formatter 中。

interface IViewSchema {
  "title": String,
  "buttons": [
    {
      "buttonText": String,
      "role?": "cancel" | "submit",
      "callback?": 'cancel' | 'submit' | Function,
      "disabled": String
    }
  ],
  "viewTemplate?": String,
  "formControls?": [
    {
      "formTemplate?": String,
      "label": String,
      "maxLength?": number, // max length of input
      "minLength?": number, // min length of input
      "hidden?": String, // if hidden is true, hide the form control
      "disabled?": String, // if data is editable or not, default true,
      "placeholder?": String,
      "model?": String,
      "$validate?":Function[],
      "$parser?": { // parse modal data to view data
        "async?": boolean, // default false, run async parser or not
        "remote?": { // enabled only when async is true
          "url": String, // remote url
          "method?": String, // calling method
          "headers?": JSON, 
          "body?": String | JSON
        },
        "parse?": Function
      },
      "$formatter?": Function
    }
  ]
}

最佳答案

我在我的项目中遇到了同样的问题。我们正在使用 Angular 4 + Redux . 这是我的解决方法:

import { AppActions } from '../app.actions';
import { IAction } from './model.interface';
import { SomeService} from '../services/some.service';
const someService = new SomeService();
export function someReducer(reducersKey) {
   return function (state: IState = INITIAL_STATE,
                    action: IAction): IState {
if (action.type === AppActions.REHYDRATE) {
  if (action.payload) {
const newState = someService.awesomeMethod();
    return {...state, ...newState};
  }
  return state;
 }
 return state;
};

关于angular - 如何将服务注入(inject)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787394/

相关文章:

javascript - 语法错误 - typescript - 意外标记 :?

javascript - '+' 在 AngularJS 中执行连接而不是加法

javascript - 将变量传递到自定义按钮

angular - 如何使用 Apollo 后端在 TypeScript Angular 应用程序中键入部分类型?

angular - Webpack 找不到任何 Angular 2 模块

javascript - 在 ionic 2 中,有什么方法可以将滚动动量检测为事件吗?

TypeScript 编译错误无法调用类型缺少调用签名的表达式

javascript - 可观察与回调

angular - 对数据源应用过滤器以将特定数据发送到表

javascript - 单击元素时 Angular 关注输入