AngularJS调用其名称构造为字符串的函数

时间:2017-04-03 10:12:32

标签: javascript angularjs

我的情况是主要功能名为:

Add_<Element_Type>_Page()

其中Element_Type作为参数收到。

我可以看到两个选项来处理正确函数的调用:

  1. 编写一个相对较长的switch构造,涵盖Element_Type

  2. 的所有可能值
  3. 使用一些现有的机制/技巧(我不知道),通过它我可以使用收到的Element_Type构建一个字符串,并调用一个名称包含在该字符串中的函数。

  4. 毋庸置疑,就参数而言,所有可以这种方式调用的函数都具有完全相同的签名。

    显然,选项2将是最好的(易于维护且非常通用,因为无论何时添加新类型的页面都不需要进行任何更改)。

    这可以在AngularJS框架内实现吗?

    提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用.表示法而不是$scope["Add_" + Element_Type + "_Page"]()

来执行此操作

像这样,

$scope.Add_test_Page()
如果Element_Typetest

将致电controllerAs

或者如果使用vm["Add_" + Element_Type + "_Page"]() 语法,

Element_Type

其中Element_Type是您提到的接收参数。

如果您想在HTML中使用它,可以在$scope / vm(无论您使用哪种方式)中引用{{1}}并访问它。

答案 1 :(得分:0)

创建一个名为func-name的属性,并将您的动态字符串值(您的函数名称)传递给该属性,并在指令中执行此类操作。

scope: {
 funcName: '@'
},
controller: function() {
 $scope[$scope.funcName]();
}