将一些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的新手,我想知道我是否会错过更好的方法。
答案 0 :(得分:0)
您应该使用Angular服务。
每个服务都是一个单独的服务,所以当你将它注入你的组件时,所有的参考都会针对同一个实例。
因此,当您在服务中定义格式化程序时,您应该公开方法getFormatter(formatterName)
或格式化程序集Map并使用它:
// method:
let formatter = formatterService.getFormatter('myForm');
// Map:
let anotherFormatter = formatterService.formatters['myForm']
请不要忘记您注入服务而不是实例化。