我需要在我的指令中调用$ compile。大多数谈论DOM操作的例子都说这应该在链接函数中完成。
但是,如果我正在观看模型属性,那么我肯定可以使用ng-change并在控制器中处理它?无论如何都都有效。
指令HTML模板:
<div>
<div>
<select ng-model="myProperty" ng-change="onChange()">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div id="toBeReplaced"></div>
</div>
JS指令:
angular.module('myApp')
.directive('myDirective', ['$compile', function ($compile) {
var markup = '<div>{{ property }}</div>';
return {
templateUrl: '/views/template.html',
restrict: 'A',
controller: function($scope, $element, $attrs){
// other controller code that I need.
$scope.onChange = function(){
$element.find("#toBeReplaced").html(markup);
$compile($element.contents())($scope);
};
},
link: function(scope, element, attrs) {
scope.$watch('myProperty', function(newVal, oldVal){
if(oldVal !== newVal) {
element.find("#toBeReplaced").html(markup);
$compile(element.contents())(scope);
}
});
}
};
}]);
有没有理由不使用控制器解决方案?