String Angular JS ng单击操作函数作为字符串

String Angular JS ng单击操作函数作为字符串,string,angularjs,action,String,Angularjs,Action,我正在创建一个应用程序,其中站点菜单将从JSON文件动态加载。每个菜单可能对应于ng click指令中定义的操作。这看起来像这样 <li ng-repeat="menuItem in menuContainer.menus" class="{{menuItem.cssClass}}"> <a href="{{menuItem.url}}" ng-click="{{menuItem.clickAction}}"> <i clas

我正在创建一个应用程序,其中站点菜单将从JSON文件动态加载。每个菜单可能对应于
ng click
指令中定义的操作。这看起来像这样

<li ng-repeat="menuItem in menuContainer.menus" class="{{menuItem.cssClass}}">        
    <a href="{{menuItem.url}}" ng-click="{{menuItem.clickAction}}">    
    <i class="{{menuItem.iconClass}}"></i>{{menuItem.name}}

<span class="badge">{{menuItem.subMenus.length}}</span>
    </a>`enter code here`
<li>
  • `在这里输入代码`
  • 现在的问题是,
    ng click
    无法将
    clickAction
    识别为一个函数,我相信这是由于链接过程造成的。我想知道是否有任何方法可以计算字符串到方法的值。我尝试执行
    $eval
    ,但它会在加载时执行该函数


    如何做到这一点?

    将方法定义为函数而不是字符串,并将
    ng click=“{{menuItem.clickAction}}”
    替换为
    ng click=“menuItem.clickAction()”
    。在$scope上定义函数的另一种方法,如:

    $scope.executeString = function(body){
      eval(body);
    };
    
    并将ng click替换为
    ng click=“executeString(menuItem.clickAction)”
    。无论如何,use eval是反模式;)


    请记住,
    ng click
    和其他类似的指令将角度表达式作为参数。如果表达式的主体是
    a=b+c
    ,请使用javascript将其转换为
    $scope.a=$scope.b+$scope.c

    不要在代码中使用html转义序列,请按ctrl+K将其转换为带引号的代码。请注意,结束语
  • 应该是