#javascript #angularjs
#javascript #angularjs
Вопрос:
Мне нужно вызвать $compile в моей директиве. Большинство примеров, в которых говорится о манипулировании DOM, говорят, что это должно быть сделано в функции link .
Но если я смотрю свойство модели, то, конечно, я могу использовать 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);
}
});
}
};
}]);
Есть ли какая-либо причина не использовать решение контроллера?
Комментарии:
1. Согласно документации angular, используйте controller только в том случае, если вы хотите взаимодействовать с этой директивой из другой директивы
2. И не могли бы вы избежать всей этой привязки html, подобной jQuery, просто с помощью ng-bind-html ? Кроме того, вы
$element.find
не будете работать с jqlite, поскольку jqlite находит только по имени тега .3. @Ahmad Я прочитал это, но это кажется ограниченным. Если директива имеет собственную область действия, должен ли я использовать для нее контроллер для настройки его свойств и методов модели?
4. @DominikSchreiber Спасибо. Я просто очень быстро это понял. Получение элементов ни здесь, ни там для моего вопроса :). Не могли бы вы указать мне на что-нибудь полезное для ng-bind-html? Мне было интересно, как я мог бы его включить.
5. @AlexB, нет, в этом нет необходимости, переменная области видимости представляет вашу модель в представлении