2016-01-07 3 views
0

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

Я хотел бы иметь возможность вызвать определенный метод для детей из родителя. Я заранее знаю, какие дети я буду звонить (путем ввода начального и конечного индекса списка предметов). Поэтому я хочу избежать использования широковещательной передачи, так как я не хочу вызывать всех детей, но только выбранных.

У обоих детей и родителей есть свои изолированные области.

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

+0

Вы должны сделать действие (например, щелчок по элементу), чтобы сделать этот звонок, или это должно быть сделано сразу после загрузки страницы? – Iamisti

+0

Это зависит от взаимодействия пользователя, например, нажатие кнопки и т. Д. – vondip

ответ

1

Попробуйте создать controllers для вашей родительской директивы. Это доступно для ваших директив для детей, это некие общие функции для ваших детей. Затем вы можете зарегистрировать функцию, которая может добавлять новые функции к родительским контроллерам, которые впоследствии могут выполнять. Позвольте мне показать вам простой пример (возможно, он не будет работать с копией пасты, ее просто теория, как она должна выглядеть)

//parent directive's controller function 
function ParentControllerFunction(){ 
    this.arrayOfChildFuncions = []; 
} 

//your child directive's link function 
require: '^ParentControllerFunction' 
link: function(scope, element, attr, ctrl){ 
    function myLittleFunction(){ 
     //hhere is your function that you can call 
    } 

    ctrl.arrayOfChildFuncions.push(myLittleFunction); 
} 

Тогда в дальнейшем вы можете выполнять свои функции в зависимости от того, какой из Вы хотите:

//executes the 3rd directive's function with the parameter 'hello' 
arrayOfChildFuncions[3]('hello') 
+0

интересный подход, что вы думаете об этом? Кажется, немного взломан. Что произойдет, если дети изменят порядок внутри родителя, как я тогда узнаю, какая функция является подходящей? – vondip

+0

Тогда вам потребуется какая-то идентификация для каждого и добавьте ее таким образом. like: 'objectOfChildFunctions [item.id] = myLittleFunction;' Так что с вашего контроллера вы можете вызвать функцию соответствующего элемента. – Iamisti

0

вы можете использовать $ index, чтобы получить желаемую директиву из ng-repeat, а затем вызвать свою функцию. https://docs.angularjs.org/api/ng/directive/ngRepeat

+0

Можете ли вы привести пример? Я не уверен, как достичь этого, используя $ index – vondip

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