2015-03-29 4 views
0

У меня есть пара директив, одна из которых живет в другой и требует ее использования require: '^parentTag'. Эти две директивы также объявляют свои собственные контроллеры. Внутри родительской директивы я могу получить доступ к ее контроллеру в качестве четвертого аргумента до link: function(scope, el, attrs, ctrl), но у ребенка этот четвертый аргумент является либо требуемым контроллером, либо массивом требуемых контроллеров, а контроллер директив больше недоступен.Требуется контроллер директив рядом с другими необходимыми контроллерами

Я попытался потребовать контроллер, используя имя, используемое в controllerAs 'vm', а также используя имя строки для контроллера. Ни один из них не возвращает контроллер в этот четвертый аргумент.

Контроллер доступен из области действия как scope.vm, но я хотел бы получить к нему доступ через этот четвертый аргумент, если это возможно.

Этот Plunkr показывает, что ChildController не находится в четвертом аргументе и только в области видимости, но ParentController доступен в качестве четвертого аргумента.

http://plnkr.co/edit/2WmB6Bqgc8MEG9JWz4wt

+0

пожалуйста смотрите здесь https://docs.angularjs.org/guide/ директива # СОЗДАЕТ-директива, которые, общаться – sylwester

ответ

1

Вы могли бы требовать того же директиву своим именем (никогда не видел, чтобы кто на самом деле сделать это):

function ChildTag() { 
    return { 
    restrict: 'AE', 
    require: ['^parentTag', 'childTag'], 
    scope: {}, 
    template: '<div class="child-tag">Child</div>', 
    link: link, 
    controller: ChildController, 
    controllerAs: 'vm', 
    bindToController: true 
    } 

    function link(scope, element, attrs, ctrls, transclude) { 
     // ctrls[1] is ChildController 
     console.log('Child vm not found in ctrls', ctrls); 
     console.log('Child vm found on scope', scope.vm); 
    } 
} 
Смежные вопросы