compile
: vs link(pre/post)
vsの各項目の目的はすでにわかっています。controller
だから私はこの単純なコードを持っているとしましょう:
HTML
<body ng-controller="mainController">
{{ message }}
<div otc-dynamic=""></div>
</body>
Controller
app.controller("mainController", function($scope) {
$scope.label = "Please click";
$scope.doSomething = function() {
$scope.message = "Clicked!";
};
});
Directive
app.directive("otcDynamic", function($compile) {
var template = "<button ng-click='doSomething()'>{{label}}</button>";
return {
compile: function(tElement, tAttributes) {
angular.element(tElement).append(template);
for (var i = 0; i < 3; i++) {
angular.element(tElement).append("<br>Repeat " + i + " of {{name}}");
}
return function postLink(scope, element, attrs) {
scope.name = "John";
}
}
}
});
ご覧のとおり、テンプレートを変更します(compile
関数で-実際にあるべき場所です)
結果 ( plnker ):
しかし
それが関数template:...
を取ることもできるとは知りませんでした。
したがって、template
代わりに関数を使用できます(plunker):
app.directive("otcDynamic", function() {
var template1 = "<button ng-click='doSomething()'>{{label}}</button>";
return {
template: function(element, attr) {
element.append(template1);
for (var i = 0; i < 3; i++)
element.append("<br>Repeat " + i + " of {{name}}");
},
link: function(scope, element) {
scope.name = "John";
}
}
});
質問
その場合 -template
関数 vscompile
関数はいつ使用する必要がありますか?