2017-02-15 39 views
0

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

所以这是一个格式化功能:

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

而构建功能:

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

而且构建被称为与特定的格式:

build(xData, yData, 'tickPositionerYMD'); 

在JavaScript中,窗口[]用于创建函数引用。

问题是......在Angular 2组件中做这件事的最好方法是什么?已经看到了一种方法,通过引用窗口来创建服务......这是通过DI传入的。

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

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

回答

0

您应该使用Angular服务。

每个服务都是单例,所以当你将它注入到你的组件时,所有的引用都将引用到同一个实例。

所以,当你定义格式化诠释你的服务,你应该公开这两种方法getFormatter(formatterName)或格式化地图,并使用它像这样:

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

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

但不要忘记,你注入服务不能实例。