2016-12-09 26 views
0

我想从一个JSON数组中调用一个自定义指令,而不是实际直接调用指令。所以,例如,我有一个名为AccessibilityRadio的自定义指令,它通过使用动态创建单选按钮。我想使用 < {{field.customDirectiveName}}>并从JSON数组中提取值以调用自定义指令。问题是,当我这样做时,我只能在浏览器访问权限收音机上看到自定义指令的名称。所以在我的JSON数组中,我有$ scope.test.fields [{“customDirectiveName”:“accessibility-radio”}] - 类似的东西。是否可以从JSON数组中调用AngularJS中的自定义指令?

是否可以将自定义指令作为json值调用,而不是直接从窗体调用自定义指令。有一个更好的方法吗?谢谢

+0

我已经多次阅读您的文章,仍然不确定您的要求 - 您是否说要动态改变一些自定义指令的内容? – RamblinRose

回答

0

您希望使用$ compile服务来处理对包含其他指令的内容的即时更改。

Here's a trivial example用不同指令改变内容。

代码的要点是包装指令,它通过$ compile服务用名为'directiveName'的元素替换它的内部内容。

.directive("wrapper", function($compile, $interval) { 
    return { 
     scope: { 
     directiveName: "=" 
     }, 
     link: function(scope, elem, attrs) { 
     scope.$watch("directiveName", function() { 
      var html = "<" + scope.directiveName + "></" + scope.directiveName + ">"; 
      elem.html(html); 
      $compile(elem.contents())(scope); 
     }); 
     } 
    } 
    }) 

的包装指令使用$看检测的scope.directiveName变化,所以当scope.directiveName改变包装指令替换其内容与名称= scope.directiveName的元素,并编写内容。

+0

这是一个很好的答案。非常感谢你。如果我想向下拉列表或任何其他表单元素添加ng-repeat,该怎么办?需要传递什么信息。我遇到的问题是使用范围变量中的ng-repeat填充下拉菜单。你能否提供一个例子,因为我在使用http://plnkr.co/edit/93xN6ZlVcsfML1lVSx5c?p=preview时遇到了问题。感谢您的回答,并指引我朝着正确的方向前进。 –

+0

我有另一个问题。除了wrapper指令之外,不用创建一个新的控制器,如果我想使用wrapper指令来调用现有的自定义指令而不交替指令,该怎么办?所以,换句话说,从包装我想传递的自定义指令的名称,只显示自定义指令,这是另一个指令不在控制器内。类似于
并且html将基于来自页面的另一个自定义指令而不是来自特定控制器。 –

+0

很高兴帮助,考虑*接受*它作为答案。 – RamblinRose

相关问题