пользовательская директива angularjs с областью действия и ng-контроллером

0

Я хочу создать директиву с параметрами области и 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 для настраиваемой директивы, а затем предоставить дополнительные переменные области для этого контроллера.

Как я могу это достичь?

  • 0
    не хватит ли компонентов AngularJS?
Теги:
angular-directive
ng-controller

1 ответ

0

Вы должны обернуть свою директиву тегом и поставить контроллер там.

<div ng-controller="RegisteredController">
   <csm-dir name="scopeParam">
       <!--Here I want to have content--> 
       {{name}}
   </csm-dir>
</div>

В одном теге нет возможности получить две изолированные области.

  • 0
    Да, это сделало бы это, но мне было интересно, могу ли я обернуть директиву ng-controller в другую директиву
  • 0
    Вы можете сделать забавную вещь. Создайте родительскую директиву и свяжите ее с контроллером. Затем добавьте дочернюю директиву с параметром require. И получить доступ к контроллеру. Это нормально?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню