2017-06-12 85 views
0

比方说,我有以下指令:动态纳入指令

  • myDirectiveA
  • myDirectiveB
  • ...

,我有一个变量(module)的可以是ab,...我想根据module动态显示指令。

我知道我可以做

<div class="my-directives-a" ng-show="module == 'a'"></div> 
<div class="my-directives-b" ng-show="module == 'b'"></div> 

但是这不正是我想要的。在我的项目,我想有这样的事情

<div ng-repeat="module in modules"> 
    <div class="my-directive-{{ module }}" ...></div> 
</div> 

所以我创造了这个plunker script检查我的想法,但是这似乎并没有工作:(

我的问题是:这是可能的,并如果是这样的选项来完成动态指令怎么样?这是摆在首位一个好主意,或者我应该尝试解决不同的方式我的问题?

+0

为什么你不能用“NG-开关”或“NG-如果”它比“NG秀”,它只是改变CSS更好“ ng-switch“和”ng-if“将它从DOM中移除。 https://docs.angularjs.org/api/ng/directive/ngSwitch –

+0

因为我不知道需要包含多少条指令,而且我也不想对它们进行硬编码。 – Pablo

回答

2

一种是通过使用$编译。

鉴于一条指令:

angular.module(...) 
.directive("dynamicDirective", ["$compile", function($compile) { 
    return { 
    scope: { dirName: "=" }, 
    link: function(scope, elem, attrs) { 
     var template = '<div class="my-directives-"' + scope.dirName + '></div>'; 
     directiveElem = $compile(template); 
     elem.append(directiveElem); 
    } 
    }; 
}]); 

您可以使用指令如下:

<div dynamic-directive dir-name="module" ng-repeat="module in modules"></div> 
+0

谢谢,这看起来不错。我会稍后再尝试。例如,如果我有'

'和某些用户交互将'$'.module'从'a'更改为'b',会发生什么?角将自动加载新的指令或我必须观看一些属性? – Pablo