2

我有幾個指令,我想選擇每個指令來得到ng-repeat的結果。在AngularJS中動態選擇指令

<div class="{{field.type_desc}}" ng-repeat="field in row.fields"></div> 

,這是在控制器

app.directive('Textbox', function($compile) { 
return { 
    restrict: 'C', 
    link : function (scope,element) 
    { 
     formFieldTemplate= $('<input>').attr('type','password'); 
     $compile(formFieldTemplate)(scope); 
     var formListElement = $(element); 
     formListElement.append(formFieldTemplate); 
    } 
} 
}) 

頁面加載速度,我可以在HTML合適的班級看後的代碼,但我仍然看不到指令。

謝謝您的幫助

+0

這一個讓我吃驚。我也嘗試過ng類的變體,它也沒有工作。 – Sharondio

+0

我認爲這將與ng-repeat是終端並且優先級爲1000的事實有關,而默認情況下優先級爲零。這意味着你的指令不應該觸發,因爲ng-repeat先行並削減編譯過程(終端)。我在這裏嘗試過,但它不工作http://plnkr.co/edit/IRFLfQKRcp1kxuvhGNdE?p=preview –

+0

看看這個:http://stackoverflow.com/questions/14425497/angularjs-ngrepeat-with-multiple -object類型/ 14425547#14425547 –

回答

0

你缺少了一些東西對於動態生成指令:

var myNewDirectiveScope = $scope.$new(); 
myNewDirectiveScope.myProperty = 'Some value'; 

var myDirective = $compile('<div my-directive-name my-property="myProperty"></div>'); 

var myDirectiveElement = myDirective(myNewDirectiveScope); 

$(window.document.body).append(myDirectiveElement); 

所以首先我創建一個新的範圍。然後,我將字符串'Some value'分配給該範圍的屬性。

然後,我使用字符串模板提供編譯,其中包含指令的名稱和指向您創建的作用域上的myProperty的屬性。這將返回一個函數,該函數一旦用範圍調用將返回您實際可以附加到頁面上的元素。

所以你的情況可能是:

app.directive('Textbox', function($compile) { 
return { 
    restrict: 'C', 
    link : function (scope,element) 
    { 
     var formFieldTemplate = '<input type="password" />'; 

     var directive = $compile(formFieldTemplate); 

     var formListElement = directive(scope); 

     formListElement.append(formFieldTemplate); 
    } 
} 
})