Как передать функцию в область включения из контроллера (угловой 1.3)?
Я создал простой контейнер для повторного использования в качестве директивы с изолированной областью действия transclude
опция установлена в true.
app.directive('itemWrapper', function() {
return {
template: '...',
replace: true,
transclude: true,
restrict: 'E',
scope: {
name: '=',
isExpanded: '='
}
};
});
и директива представления списка, где я хотел бы передать функцию из контроллера, которая будет обрабатывать щелчки на элементах списка
app.directive('listItem', function() {
return {
template: '...',
replace: true,
restrict: 'E',
scope: {
item: '=',
action: '&'
},
link: function(scope, elm, attrs){
scope.performAction = function(val){
action({'data': val});
};
}
};
});
мой кусок HTML выглядит следующим образом:
<collection-wrapper name='item.name' is-expanded='item.visible'>
<list-item item='item' action='log(data)'></list-item>
</collection-wrapper>
Но когда я нажимаю на ссылку, я получаю ссылку ошибки, говоря, что action
не определено. Вопрос в том, как передать функцию в эту директиву из контроллера? Как я понимаю, зашитый прицел - это дитя изолированного прицела, и это препятствие, которое я не смог преодолеть!
Вот Плункер.
2 ответа
action
это метод в области. Вы должны сказать:
scope.action({'data': val});
По вашему мнению, "передать функцию из контроллера означает инициировать функцию из контроллера, или вы хотите, чтобы функция была запущена изнутри включенного содержимого".