2015-10-13 68 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'是链接的替代方法,无论如何,我已经尝试过您的解决方案,但没有运气,即使是指令中的选择标记中的主模板不存在,创建的新元素也是空的。 –