2014-10-28 4 views
0

Моя первая попытка на угловой.Функция контроллера модуля вызова от дочерней директивы

Я пытаюсь создать директиву, которая при щелчке вызовет функцию, объявленную в функции контроллера модели.

Вот мой упрощенный код: http://jsfiddle.net/vnj62xn8/

JS:

angular.module('tasks', []) 
.controller('taskCtrl', function($scope){ 
    $scope.complete = function(){ 
     console.log('parent function'); 
    } 
}) 
.directive('taskList', function(){ 
    return { 
     restrict: 'E', 
     scope: { 
      complete: '&' 
     }, 
     template: '<button ng-click="complete()">Complete Task</button>', 
     controller: function($scope){ 
      /*$scope.complete = function(){ 
       console.log('child function'); 
      }*/ 
     } 
    } 
}); 

HTML:

<div ng-app="tasks"> 
    <task-list></task-list> 
</div> 

Я посмотрел на друг Q/Как на SO и обнаружил, что это, кажется, быть наиболее обобщенным решением, хотя он никогда не вызовет функцию complete(), найденную в контроллере taskCtrl. Однако он будет вызывать функцию complete() из контроллера директивы, если он не подписан. Что мне не хватает?

+0

Вам необходимо настроить fu nciton binding (для 'complete: '&''). '' – PSL

ответ

0

Вам нужно написать HTML следующим образом:

<div ng-controller="taskCtrl"> 
    <task-list complete="complete()"></task-list> 
</div> 

Вот ссылка на обновленную скрипку http://jsfiddle.net/paila/vnj62xn8/4/

+0

Я обновил jsfiddle, но он все равно не попадет в родительскую функцию: http://jsfiddle.net/vnj62xn8/2/ – Prusprus

+0

Обновлен ответ , Вам не хватает div ng-controller = "taskCtrl". –

+0

Это работает. Спасибо за вашу помощь. Если я могу задать вам другой вопрос, так как я пытаюсь реализовать это в своем проекте - следующий jsfiddle: http://jsfiddle.net/vnj62xn8/5/ моя директива/контроллер - часть подмодуля, но я не могу найдите их больше. Что я делаю не так? – Prusprus

0

Просто измените код:

.directive('taskList', function(){ 
    return { 
     restrict: 'E', 
     scope: { 
      complete: '&' 
     }, 
     template: '<button ng-click="complete()">Complete Task</button>', 
     controller: 'taskCtrl' // Here you are referencing the taskCtrl 
    } 
}); 

Вам просто нужно ссылаться ваш существующий контроллер внутри назначения контроллера

+0

Спасибо, это сработало для моего примера. Однако возможно ли, чтобы ваша директива определяла его контроллер, расширяя функции от контроллера модуля? – Prusprus

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