2015-10-13 70 views
1

我工作的AngularJS應用程序,我現在用的是下面的指令應用指令,動態創建的DOM

app.directive('w34Lang', function() { 
return { 
    restrict: "A", 
    template : "<select ng-model='language'><option selected disabled value=''>Language</option></select>", 
    link: function (scope, elem) { 
     scope.isolateScope = true; 
     var lang= angular.element(elem.find('select')[0]); 
     var langs = ["arabic" ,"english","Portugal"] 
     for (var i = 0; i < langs.length; i++) { 
      lang.append('<option value="'+langs[i]+'">'+langs[i]+'<otion>'); 

     } 


     } 
    } 

}) 
在我使用這個指令,沒有任何問題的HTML

,問題是,當我加入一個具有相同指令的動態創建的DOM元素。它只是在HTML中創建的,但該指令不適用於它。

無論如何要將指令應用到動態創建的DOM?

+0

根據您創建新元素的方式,您可能需要編譯內容或觸發$ digest循環。 – buzzsaw

回答

2

從來沒有聽說過exec,或能夠找到它的任何文件。那是什麼?

無論如何,在你的link函數中,你需要編譯你的動態生成的DOM。像這樣:

app.directive('w34Lang', function() { 
    return { 
     restrict : "A", 
     template : "<select ng-model='language'><option selected disabled value=''>Language</option></select>", 
     scope: {}, 
     link: function (scope, elem, attrs) { 
      var langs = ["arabic", "english", "Portugal"]; 

      for (var i = 0; i < langs.length; i++) { 
       var template = '<option value="' + langs[i] + '">' + langs[i] + '</option>'; 

       elem.append(angular.element(template)); 
      } 
     } 
    } 
}); 
+0

'exec'是鏈接的替代方法,無論如何,我已經嘗試過您的解決方案,但沒有運氣,即使是指令中的選擇標記中的主模板不存在,創建的新元素也是空的。 –