2014-11-21 2 views
0

Я хочу знать, есть ли какой-либо способ обмена данными с контроллера директивы на контроллер без событий. позволяет сказать, что у меня есть:Угловые данные об общем доступе от контроллера директивы к контроллеру

.directive('someHandler', function() { 
    return { 
     controller: function() { 
     this.users = []; 
     } 
    } 
    }) 

Это родительская директива, которая отвечает его детям директивы связи. Я хочу, чтобы каждый раз позволял сказать, что этот массив изменился, чтобы сообщить основному контроллеру. Как и функции «=»;

+0

Директивы ребенка могут «требовать» родителя. Угловой передаст экземпляр родительского контроллера в качестве 4-го аргумента функции «link» дочернего элемента. https://docs.angularjs.org/guide/directive –

+0

Да, но я хочу, чтобы это было не у детей. Я хочу это на mainController. Контроллер представления. –

+0

звучит как ваш 'users' является моделью для этой директивы. Затем определите его как таковой. Не создавайте 'users' в директиве. Использовать 'ngModel' – akonsu

ответ

0

Это моя идея, надеюсь, что это сработает. Попробуйте использовать контроллер директивы

.directive('someHandler', function() { 
    return { 
    //...previous arguments 
    controller: function ($scope, $element, $attrs) { 
      $scope.YourFunction = function() { 
       //Your code 
      } 
    } 
    }); 

, а затем вызвать $ scope.YourFunction() в контроллере.

Сложение

, если вы хотите использовать функцию из родительской директивы, вы должны включать в себя требуется аргумент в директиве ребенка. Таким образом, вы создаете иерархические отношения и позволяете общаться между ними.

После этого вы должны использовать функцию связи для вызова функции из родительского контроллера.

В вашем случае, директива ребенок будет выглядеть следующим образом:

.directive('childsomeHandler', function() { 
    return { 
    //...previous arguments 
    require:"^someHandler", //here is inheritance to make communication between child and parent diretctive 

    link: function (scope, element, attrs, someHandlerCtrl) { 
     someHandlerCtrl.YourFunction(); 
    } 
    }); 

Читая эту post, вы будете знать, когда использовать ссылку и контроллеры. Для получения дополнительной информации прочтите эту замечательную статью: https://thinkster.io/egghead/directive-communication/

В конце концов, я надеюсь, что это будет полезно для вас.

+0

Но как я использую эту функцию в директивах childs? –

+0

Я сделал дополнение к своему сообщению. – arman1991

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