2015-05-21 4 views
0

У меня есть две директивы, и я хотел, чтобы использовать его как так:Доступ сфера из родительской директивы angularjs

<m-list m-searchable></m-list> 

Таким образом, две директивы были m-list и m-searchable, теперь я хочу, чтобы получить доступ и манипулировать сферу действия m-list, когда я прилагаю директиву m-searchable.

У меня есть это:

'use strict'; 

angular.module('app') 
    .directive('mList', function() { 
    return { 
     restrict: 'E', 
     scope: {}, 
     controller: function($rootScope) { 
     var vm = this; 
     vm.name = 'joey'; 
     }, 
     controllerAs: 'ctrl', 
     bindToController: true, 
     templateUrl: '...' 
    }; 
    }); 

И мои м-поиска выглядит следующим образом:

angular.module('app') 
    .directive('mSearchable', function() { 
    return { 
     restrict: 'A', 
     scope: {}, 
     controllerAs: 'ctrl', 
     bindToController: true, 
     replace: true, 
     controller: function($rootScope, $scope) { 
     // I want console.log the scope of the directive where I attached the `m-searchable` 
     } 
    }; 
    }); 

Я хочу console.log сферу действия директивы, где я прикрепил m-searchable. Как мне получить доступ к vm.name?

+2

Добавление 'require: 'mList'' к вашему определению' mSearchable' даст вам доступ к контроллеру 'mList' через четвертый аргумент функции' link'. https://docs.angularjs.org/api/ng/service/$compile#-require- – miqid

ответ

0

Во-первых, я думаю, что вы столкнетесь с ошибкой компиляции $ из-за того, что обе директивы попытаются иметь свою изолированную область видимости на одном элементе.

https://docs.angularjs.org/error/ $ компилировать/multidir p0 = mList & p1 = mSearchable & p2 = новое% 2Fisolated% 20scope & p3 =% 3см-лист% 20m-поиска% 3D% 22% 22% 3E

Обновлено: лучше, как было предложено на http://juristr.com/blog/2015/01/learning-ng-directives-access-scope-controller/

это передать объект между контроллером & директива

<m-list m-searchable name="name"></m-list> 

app.directive('mList', function() { 
return { 
    restrict: 'E', 
    scope: { name: "="}, 
    controller: function($rootScope, $scope) { 
    var vm = this ; 
    vm.name = 'joey'; 

    }, 
    controllerAs: 'ctrl', 
    bindToController: true 
}; 
}); 

http://plnkr.co/edit/OKVicRzjuH6L0xedF2qB?p=preview

+0

Я думаю, что вы правы в нескольких областях изоляции. Но доступ к таким возможностям для братьев и сестер выглядит немного изворотливым. – z0r

+0

немного дож? https://pbs.twimg.com/profile_images/417201275466690560/TzVjIXv2.jpeg LOL –

+0

Обновлен для использования лучшего подхода к передаче объекта между контроллером и директивами. – kwangsa

Смежные вопросы