Функции привязки через вложенные директивы с ошибкой изолированной области в Angular 1.4

В обновлении 1.4 появилась проблема при связывании функций во вложенных директивах. У меня есть пример планкера: http://plnkr.co/edit/fQLY0N8BTNs38VC8ikll

Код:

var app = angular.module('myApp', []);

app.controller('myCtrl', function(){
  this.searchFunction = function(term) {
    console.log('you searched for ' + term);
  }
 });

 app.directive('outerDirective', function(){
   return {
    restrict: 'E',
    scope: {
      outer: '&'
    },
    template: '<inner-directive inner="cx.outer(term)"></inner-directive>',
    controller: function(){

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

app.directive('innerDirective', function(){
  return {
    restrict: 'E',
    scope: {
      inner: '&'
    },
    template: '<a ng-click="cx.execute()">Click</a>',
    controller: function(){
      this.execute = function(){
        this.inner('fred');
      }
    },
    controllerAs: 'cx',
    bindToController: true
  };
});

Это работало в 1.3, но есть ли какой-то новый способ сделать это в 1.4?

Перейдя по ссылке, вы увидите следующую ошибку в консоли:

Ошибка типа: невозможно использовать оператор «in» для поиска «cx» в fred на странице fn (eval at (https://code.angularjs.org/1.4.0/angular.js:13036:15), :2:54) в пункте назначения.(анонимная функция) [как внутренний] (https://code.angularjs.org/1.4.0/angular.js:8689:22) при выполнении (http://run.plnkr.co/zE9xlCQNMBrOZZgi/script.js:35:14) в fn (eval в (https://code.angularjs.org/1.4.0/angular.js:13036:15), :2:237) при обратном вызове (https://code.angularjs.org/1.4.0/angular.js:23090:17) по адресу Scope.$eval (https://code.angularjs.org/1.4.0/angular.js:15719:28) в Scope.$apply (https://code.angularjs.org/1.4.0/angular.js:15818:23) в HTMLAnchorElement. (https://code.angularjs.org/1.4.0/angular.js:23095:23) в HTMLAnchorElement.eventHandler (https://code.angularjs.org/1.4.0/angular.js:3247:21)


person Andrew Jones    schedule 01.06.2015    source источник


Ответы (1)


Похоже, вы столкнулись с ошибкой, потому что не используете подход {param: value} для вызова функции в директиве. В plunkr также отсутствует функция cx.outer, поэтому я не уверен, что мы ожидаем увидеть.

Я обновил ваш plunkr, чтобы продемонстрировать его работу с Angular 1.4 с явной передачей параметров: http://plnkr.co/edit/T7aasD?p=preview.

person spikeheap    schedule 02.06.2015
comment
Спасибо @spikeheap. В чем причина того, что передача в этой нотации объекта работает, а не вызывает функцию в обычном режиме? - person Ash McConnell; 13.06.2016