2017-06-12 92 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