2017-01-18 2 views
2

Все:Как связать ng-click с обработчиком события, определенным внутри директивы?

Я определяю директиву как:

.directive("hellobutton", function(){ 
    return { 
     restrict: "AE", 
     scope: {}, 
     controller: function($scope){ 
      $scope.sayhello = function(){ 
       console.log("hello"); 
      } 
     } 
    } 
}) 

Интересно, как я могу использовать, что SayHello обработчик на эту директиву, как:

<hellobutton ng-click="sayhello()"></hellobutton> 

В принципе я не хочу, чтобы пройти SayHello от внешнего охвата, но пусть это внутренняя область действия справки справится с этим.

Интересно, возможно ли это, или я должен определить этот обработчик внутри шаблона?

ответ

0

Вы хотите передать функцию в качестве параметра:

.directive("hellobutton", function(){ 
    return { 
     restrict: "AE", 
     scope: { 
      callback: '&' 
     }, 
     controller: function($scope){ 
      $scope.callback(); 
     } 
    } 
}) 

и

<hellobutton callback="sayhello()"></hellobutton> 
+1

Спасибо, но я не совсем получить ур точки, вы имеете в виду, мы должны передать эту SayHello() из Outter сферы? – Kuan

+0

Чтобы добавить комментарий к OP: Объясните, что вы сделали и почему. Неясно. Мне нравится помещать комментарии в код, чтобы указать, что я сделал по-другому и что он делает, чтобы решить проблему. –

0

Да, вы можете. Просто определите директиву со ссылкой и привяжите событие click. Затем он может быть прикреплен к любому элементу. См plunker

JS:

app.directive("hellobutton", function(){ 
    return { 
     restrict: "A", 
     link: function(scope, elem, attr) { 
      elem.on('click', function() { 
      console.log("hello"); 
      }) 
     } 
    } 
}) 

Markup:

<button type="button" hellobutton="">Click Me, I'm a button</button> 
<div hellobutton="">Click me too, I'm a DIV</div> 
Смежные вопросы