Angular 2将函数名称转换为函数参考

时间:2017-02-15 21:03:52

标签: javascript function angular

将一些javascript逻辑移动到Angular 2应用程序中。它的一部分涉及一个本地的“格式化”函数库[它们不仅仅是格式化,因此管道不是一个选项]目前这些是通过名称(字符串)传递的,接收函数使用窗口[fName]将它们转换为功能参考。

所以有格式化函数:

var tickPositionerYMD = function() { ticks=[]; ... complex logic ... return ticks; }

构建功能:

build(x, y, formatterName) {
 ... 
 formatter = window[formatterName];
 ... 
}

使用特定的格式化程序调用构建:

build(xData, yData, 'tickPositionerYMD');

在javascript中,window []用于创建函数引用。

问题是......在Angular 2组件中执行此操作的最佳方法是什么?已经看到了一种方法,其中通过对窗口的引用来创建服务...这通过DI传递。

第二种方法是创建一个给出名称的工厂函数,返回一个函数。

鉴于这些选择,我倾向于选择工厂功能。作为Angular的新手,我想知道我是否会错过更好的方法。

1 个答案:

答案 0 :(得分:0)

您应该使用Angular服务。

每个服务都是一个单独的服务,所以当你将它注入你的组件时,所有的参考都会针对同一个实例。

因此,当您在服务中定义格式化程序时,您应该公开方法getFormatter(formatterName)或格式化程序集Map并使用它:

// method:
let formatter = formatterService.getFormatter('myForm');

// Map:
let anotherFormatter = formatterService.formatters['myForm']

请不要忘记您注入服务而不是实例化。