Я хочу создать директиву с параметрами области и ng-controler.
Вот как должна выглядеть эта директива:
<csm-dir name="scopeParam" ng-controller="RegisteredController">
<!--Here I want to have content-->
{{name}}
</csm-dir>
У меня есть "RegistertedController", объявленный где-то в моем приложении.
angular.module('app')
.controller('RegisteredController', ['$scope', function ($scope) {
//$scope.name should be accessible here
}]);
И я пытаюсь объявить директиву:
angular.module('app')
.directive('csmDir', [function () {
return {
restrict: 'AE',
replace: true,
transclude: true,
scope: {
name: '='
},
template: '<section class="layout"><ng-transclude></ng-transclude></section>',
link: function (scope, element, attr, ctrl, transclude) {
element.find('ng-transclude').replaceWith(transclude());
//here I also need scope.name parameter
}
};
});
Я получаю ошибку:
Multiple directives [ngController, csmDir] asking for new/isolated scope on: <csm-dir name="scopeParam" ng-controller="RegisteredController">
Теперь эта ошибка довольно информативна, и я получаю ее угловатой, не работает, как хотелось бы здесь.
Я могу удалить параметр "scope: {..}" из директивы и определить его в контроллере, но это не то, что мне нужно.
Мне нужно в основном предоставить ng-controller для настраиваемой директивы, а затем предоставить дополнительные переменные области для этого контроллера.
Как я могу это достичь?
Вы должны обернуть свою директиву тегом и поставить контроллер там.
<div ng-controller="RegisteredController">
<csm-dir name="scopeParam">
<!--Here I want to have content-->
{{name}}
</csm-dir>
</div>
В одном теге нет возможности получить две изолированные области.