你並不需要使用指令定義對象的compile
財產在appender
指令。您只需要$compile
服務即可編譯新的<confirmation>
元素。
此外,您可能要指定隔離範圍(即message
和/或state
)的性質:
.directive('appender', function ($compile) {
return {
restrict: 'A',
link: function postLink(scope, elem, attrs) {
elem.after($compile('<confirmation message="..."></confirmation>')(scope));
}
};
});
還參見本short demo。
UPDATE:
根據您的意見,很明顯你不明白編譯和鏈接的概念。雖然,您認爲您使用的是compile
屬性,但實際上您只需要鏈接功能。我強烈建議你仔細看看關於指令定義對象的the docs。
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
scope.$watch('items', function(val, oldVal) {
if (val === oldVal) { return; }
element.after($compile('<confirmation message="..."></confirmation>')(scope));
}, true);
}
};
還參見本等short demo。
更新2:
既然你是從其他指令的compile
函數編譯這樣堅持,
這裏是代碼:
return {
restrict: 'A',
compile: function() {
var compiled = $compile('<confirmation message="..."></confirmation>');
return function postLink(scope, elem, attrs) {
scope.$watch('items', function(val, oldVal) {
if (val === oldVal) { return; }
elem.after(compiled(scope));
}, true);
};
}
};
這裏是demo。
你的plunkr壞了(所以很明顯不能證明問題)。除此之外,一切都應該正常工作。你不是從一個指令的編譯函數編譯'',而是從postLink函數btw中編譯。 – gkalpak
Hello ExpertSystem,對不起,我已經更新了plnkr鏈接,它的工作原理。你能看看代碼並幫助我解決問題嗎?謝謝 – SinSync
仍然破碎!剩餘嘗試次數:1 – gkalpak