Как передать функцию в область включения из контроллера (угловой 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});

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

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

Другие вопросы по тегам