因爲NG單擊指令不被編譯你的NG-點擊= 「showMoreInfo()」 不點火(角度是完全不知道它),所以點擊行爲永遠不會被觸發。
如果您要使用角度指令強調動態內容,您想要閱讀$compile service。
Here's a plunkr演示$ compile和爲什麼你的代碼不工作。
下面是演示程序的腳本。 「win」指令可正確處理對DOM的更改,而「fail」指令不會。
app = angular.module("app", [])
.controller("myController",function($scope) {
$scope.showMoreInfo = function() {
alert("Win Moar!");
}
})
.directive("win", ['$compile', function($compile) {
return {
restrict: "E",
scope: {
appendToId: "@",
},
template: "<button ng-click='click()'>ng-click's Inserted From Here Wins!</button>",
link: function(scope, elem, attrs) {
scope.click = function() {
let target = angular.element(document.querySelector("#" + scope.appendToId)),
content = target.html()
;
content += ("<p><span ng-click='showMoreInfo()' class='show-more-info'>...more</span></p>");
target.html(content);
/**
* The $compile service compiles an HTML string or DOM into a
* template and produces a template function,
* which can then be used to link scope and the template together.
*
* Because the html of target is compiled it's directives are going
* to get compiled, namely ng-click='showMoreInfo()'
*
* Note the passing target.scope() instead of scope...
*/
$compile(target)(target.scope());
}
}
}
}]).directive("fail", function() {
return {
restrict: "E",
scope: {
appendToId: "@",
},
template: "<button ng-click='click()'>ng-click's Inserted From Here Fail :(</button>",
link: function(scope, elem, attrs) {
scope.click = function() {
let target = angular.element(document.querySelector("#" + scope.appendToId)),
content = target.html()
;
content += ("<p><span ng-click='showMoreInfo()' class='show-more-info'>...more</span></p>");
/**
* Changing the DOM doesn't cause angular to process changes
* e.g. compile directives like ng-click so the ng-click in
* the content doesn't work.
*/
target.html(content);
}
}
}
})
順便說一句,它通常被認爲是bad practice從控制器執行DOM操作。
這不是關於修剪任何東西。我有一個JSON文件,其中一個鍵包含一個非常長的字符串。所以我想要採取它的一部分(子字符串),並添加一個可擴展文本的可點擊跨度。我不能在模板中執行此操作,它必須從控制器動態執行,但綁定不起作用 – Shepherd