Javascript 从字符串变量中设置属性值

Javascript 从字符串变量中设置属性值,javascript,angularjs,angularjs-1.6,Javascript,Angularjs,Angularjs 1.6,我有一个外部JSON文件,它是这样的按钮/操作的集合 { "foo1":{ "name":"productDetails", "displayAs":"button", "action":"viewDetails()" }, "foo2":{ "name":"sell", "displayAs":"button", "action":"sellProduct()" } } 稍后,在

我有一个外部JSON文件,它是这样的按钮/操作的集合

   {  
   "foo1":{  
      "name":"productDetails",
      "displayAs":"button",
      "action":"viewDetails()"
   },
   "foo2":{  
      "name":"sell",
      "displayAs":"button",
      "action":"sellProduct()"
   }
}
稍后,在我看来,我为JSON中包含的每个对象创建了一个

我的问题是,我可以像这样在JSON文件中设置ng click属性吗

<li ng-repeat = "field in fields">
    <div ng-click = field.action > {{field.name}} </div>
</li>
  • {{field.name}

  • 您可以使用
    ng bind html
    执行此操作

     <li ng-repeat = "field in fields">
        <div bind-html-compile ng-bind-html="trust(field)"  >  </div>
      </li>
    
    trust
    函数中,将对象作为参数传递,并返回html信任元素

     $scope.trust = function(html) {
        return $sce.trustAsHtml('<div ng-click = "' + html.action + '" > {{field.name}} </div>');
     }
    
    $scope.trust=函数(html){
    返回$sce.trustAsHtml(“{field.name}”);
    }
    
    演示

    角度模块(“应用程序”,[]) .controller(“ctrl”,函数($scope,$sce){ $scope.viewDetails=function(){console.log(“viewDetails”)} $scope.sellProduct=function(){console.log(“sellProduct”)} $scope.fields={ “foo1”:{ “名称”:“产品详细信息”, “显示方式”:“按钮”, “操作”:“viewDetails()” }, “foo2”:{ “名称”:“出售”, “显示方式”:“按钮”, “操作”:“sellProduct()” } } $scope.trust=函数(html){ 返回$sce.trustAsHtml(“{field.name}”); } }).directive('bindHtmlCompile',['$compile',函数($compile){ 返回{ 限制:“A”, 链接:函数(范围、元素、属性){ 范围:$watch(函数(){ 返回范围$eval(attrs.bindHtmlCompile); },函数(值){ html(值); $compile(element.contents())(范围); }); } }; }]);
    
    

  • 为什么不试着检查一下你是否可以这样做呢?如果你只是在json中使用函数名(比如
    操作:'viewDetails'
    ),你可以使用
    $scope[field.action]()
    这个[field.action]()
    ,这取决于你的控制器是如何组织的,或者使用if/else树:
    if(field.action==“viewDetails()”)$scope.viewDetails()
    是的,您可以,但您必须稍微更改数据。照@DevDig说的去做@KOUSIKMANDAL如果我不试试,我就不会发这个,你不觉得吗?:)为什么
    ng bind html
    trust(field)
    ,它被设计成将
    html
    放在元素内部。trust函数返回html,以便ng bind html将绑定,我建议用更简单的方法
     $scope.trust = function(html) {
        return $sce.trustAsHtml('<div ng-click = "' + html.action + '" > {{field.name}} </div>');
     }