Мне нужно использовать jqlite для вставки HTML для директивы, но по какой-то причине директива не вставляет шаблон.
<div ng-app="docsSimpleDirective">
<div ng-controller="Controller">
<button ng-click="showCustomer($event)">click to see the customer</button>
<div>
</div>
И мой app.js выглядит так:
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$scope', function ($scope) {
$scope.customer = {
name: 'Naomi',
address: '1600 Amphitheatre'
};
$scope.showCustomer = function($event) {
angular.element($event.currentTarget).next().html("<div my-customer></div>");
};
}])
.directive('myCustomer', function () {
return {
template: 'Name: {{customer.name}} Address: {{customer.address}}'
};
});
ПРИМЕЧАНИЕ. Это просто попытка воссоздать ситуацию, в которой я вхожу, но директива должна быть вставлена в DOM аналогично вышеизложенному - в противном случае она не будет работать для моей ситуации.
Как упоминает Michelem, лучший способ сделать манипуляции с DOM - использовать директиву.
Если вы все еще хотите сделать это, используя контроллер, вы можете взглянуть на мой пример: http://jsfiddle.net/4nad43gn/3/
$scope.showCustomer = function($event) {
var element = document.querySelectorAll('[ng-controller=Controller] div');
var tpl = $compile( "<div my-customer=''></div>" )( $scope );
element[0].appendChild(tpl[0]);
};
Вам нужно добавить компиляцию $ в ваше приложение. Возможно?
Не знаю, почему вы это сделали, но это проще:
HTML:
<div ng-app="docsSimpleDirective">
<div ng-controller="Controller">
<button ng-click="showCustomer = true">click to see the customer</button>
<div my-customer ng-show="showCustomer"></div>
</div>
</div>
JS:
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$scope', function ($scope) {
$scope.customer = {
name: 'Naomi',
address: '1600 Amphitheatre'
};
$scope.showCustomer = false;
}])
.directive('myCustomer', function () {
return {
template: 'Name: {{customer.name}} Address: {{customer.address}}'
};
});
PS вы также можете использовать ng-if
вместо ng-show
если вы не хотите, чтобы элемент (вместо этого был скрыт) до щелчка.