2015-05-24 2 views
0

Я пытаюсь связать функцию через вложенную директиву. От console.info в myCtrl я ожидал бы строку "this should be logged".Функция цикла через вложенную директиву - angularjs

angular.module('myApp') 
     .controller('myCtrl', function ($scope) { 
     $scope.aFunction = function(input) { 
      console.info(input.message); 
     } 
     }) 
     .directive('levelOneDirective', function() { 
     return { 
      templateUrl: '<level-two-directive aFunction="aFunction(object)"></level-two-directive>', 
      restrict: 'EA', 
      scope: { 
      aFunction:"&" 
      }, 
      link: function (scope, element, attrs) { 
      } 
     }; 
     }) 
     .directive('levelTwoDirective', function() { 
     return { 
      templateUrl: '<div ng-click="aFunction({message: 'this should be logged'})"></div>', 
      restrict: 'EA', 
      scope: { 
      aFunction:"&" 
      }, 
      link: function (scope, element, attrs) { 
      } 
     }; 
     }); 

И в моем index.html у меня есть что-то вроде:

<div ng-controller="myCtrl"> 
    <level-one-directive aFunction="aFunction(object)"></level-one-directive> 
</div> 

Но консоль говорит undefined.

Как подключить функцию через вложенные директивы?

ответ

1

У вас есть несколько ошибок в коде, но я предполагаю, что это потому, что вы пытаетесь приспособить его к вопросу (например, aFunction как атрибут вместо a-function и templateUrl вместо template).

Вы можете иметь 2-полосные связывания (=) в своих директивах (оба из них):

scope: { 
    aFunction:"=" 
}, 

И передать ссылку на функцию без объекта:

<level-one-directive a-function="aFunction"></level-one-directive> 

Во втором в директиве HTML есть:

<div ng-click="invokeFunction()"></div> 

А затем в функции связи вашего второго страшного ctive вы можете сделать:

scope.invokeFunction = function() { 
    scope.aFunction({message: 'this should be logged'}); 
} 

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

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

+0

У меня была эта идея отсюда: https://egghead.io/lessons/angularjs-isolate-scope-expression-binding Отлично, спасибо. Работает. Извините за ошибки. – Stefan

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