2016-05-12 5 views
1

Я пытаюсь вызвать некоторые методы из родительского контроллера, определенного с помощью синтаксиса Controller as из шаблона директивы, но я не могу сделать это с изолированной областью. Я мог бы написать свою директиву без изолированного объема, но в этом случае я не могу ее повторно использовать.Доступ к методу имени контроллера из шаблона директивы

Простой пример:

angular.module('app', []) 
 
    .controller('myController', function() { 
 
     var result_el = document.getElementById("log"); 
 
     this.log = function(text) { 
 
      var p = document.createElement("p"); 
 
      p.innerHTML = text; 
 
      result_el.appendChild(p); 
 
     } 
 
    }) 
 
    .directive('myDirective', function() { 
 
     return { 
 
      restrict: 'E', 
 
      scope: {}, 
 
      template: '<button ng-click="mCtrl.log(123)">Click me!</button>' 
 
     } 
 
    });
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
 

 
<div ng-app="app" ng-controller="myController as mCtrl"> 
 
    <my-directive></my-directive> 
 
</div> 
 
<div id="log"></div>

Можно ли вызывать функции родительского контроллера из шаблона директивы?

+0

передать функцию в директиве. например 'scope: {myFunc: '&'}' – rob

ответ

0
angular.module('app', []) 
    .controller('myController', function() { 
     var result_el = document.getElementById("log"); 
     this.log = function(text) { 
      var p = document.createElement("p"); 
      p.innerHTML = text; 
      result_el.appendChild(p); 
     } 
    }) 
    .directive('myDirective', function() { 
     return { 
      restrict: 'E', 
      scope: {myFunc: '&'}, 

      template: '<button ng-click="myFunc()">Click me!</button>' 
     } 
    }); 

и ваш шаблон, как

<my-directive myFunc="log(123)"></my-directive> 
Смежные вопросы