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

Javascript AngularJS调用名称构造为字符串的函数,javascript,angularjs,Javascript,Angularjs,我遇到的情况是,主要功能如下: Add_<Element_Type>_Page() 添加页面() 其中,元素类型作为参数接收 我可以看到处理正确函数调用的两个选项: 编写一个相对较长的开关构造,涵盖元素类型的所有可能值,或 使用一些现有的机制/技巧(我不知道),通过这些机制/技巧,我可以使用收到的元素类型构建一个字符串,并调用一个名称包含在该字符串中的函数 不用说,就参数而言,所有可以以这种方式调用的函数都具有完全相同的签名 显然,选项2是最好的(易于维护且非常通用,因为每当添加

我遇到的情况是,主要功能如下:

Add_<Element_Type>_Page()
添加页面()
其中,
元素类型
作为参数接收

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

  • 编写一个相对较长的
    开关
    构造,涵盖
    元素类型
    的所有可能值,或

  • 使用一些现有的机制/技巧(我不知道),通过这些机制/技巧,我可以使用收到的
    元素类型构建一个字符串,并调用一个名称包含在该字符串中的函数

  • 不用说,就参数而言,所有可以以这种方式调用的函数都具有完全相同的签名

    显然,选项2是最好的(易于维护且非常通用,因为每当添加新类型的页面时都不需要更改)

    这可以在AngularJS框架内实现吗


    提前感谢。

    您只需使用
    […]
    符号而不是

    像这样,

    $scope["Add_" + Element_Type + "_Page"]()
    
    将调用
    $scope.Add_test_Page()
    假设
    Element_Type
    test

    或者如果使用
    controllerAs
    语法

    vm["Add_" + Element_Type + "_Page"]()
    
    其中,
    Element\u Type
    是您提到的接收参数


    如果您想在HTML中使用它,可以在
    $scope
    /
    vm
    中引用您的
    元素类型然后访问它。

    创建一个名为func name的属性,并将作为函数名的动态字符串值传递给该属性,在指令中可以执行类似操作

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

    这些函数是使用
    $scope
    vm/ctrl
    在控制器中编写的吗?疯狂的方法,这些函数是自动生成的吗?请出示一些代码。在
    Add__Page()
    中应该发生什么?这些函数需要
    元素类型
    在哪里?@tanmay,我不确定我是否明白你的意思,但我想你指的是AngularJS(即1)。@FDavidov不,它只是Angular1。我是问你的职能放在哪里?控制器?服务?@Iin,不知道为什么“疯狂”。函数不是自动生成的(尽管我希望可以…)。它们都是硬编码的。我想知道的唯一一件事是如何调用它们而无需使用
    开关
    构造。我不知道是谁否决了你的答案,但第一个建议(使用
    […]
    )很有魅力。比你强!!!!(当然标记为答案)。@FDavidov是的,很好。很高兴我能帮忙:)