2014-12-12 18 views
6

ho creato una direttiva personalizzata in angularjs:direttiva personalizzato Angularjs ng clic non funziona

directives.directive('myTop',function($compile) { 
return { 
    restrict: 'E', 
    templateUrl: 'views/header.html', 
} 
}) 

codice di direttiva:

<div class="my-header"> 
<button ng-click="alert('x')" class="fa fa-chevron-left"></button> 
<h1>SpeakZ</h1> 
</div> 

per qualche ragione, ng clic doesen't grilletto.

Ho cercato su Internet e ho trovato che compile/link è la soluzione per questo problema, ma non riesco a trovare una soluzione funzionante.

non sto usando jQuery ..

+2

avviso non funziona all'interno 'ng-click' invece sarà seach per' $ scope.alert' funzione nel campo di applicazione –

+0

originariamente Ho provato a mettere: $ location.path ('/') all'interno ng -click .. dosen't work –

+0

ovvero '$ posizione' non esiste in $ $ scope' – ryeballar

risposta

10

Avrai bisogno di aggiungere una funzione link alla definizione direttiva per far funzionare tutto questo. Quindi, fondamentalmente,

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

app.directive('myTop',function() { 
return { 
    restrict: 'E', 
    template: '<button ng-click="clickFunc()">CLICK</button>', 
    link: function (scope) { 
     scope.clickFunc = function() { 
      alert('Hello, world!'); 
     }; 
    } 
} 
}) 

E l'html:

<div ng-app="myApp"> 
    <my-top></my-top> 
</div> 

Ed ecco il violino: http://jsfiddle.net/4otpd8ah/

+0

Cosa intendi per funzioni native? – Ashesh

+0

in origine ho provato a mettere: $ location.path ('/') all'interno di ng-click .. non funziona –

+1

Che non funzionerà. Dovresti avere una funzione definita nell'ambito della direttiva (nel caso sopra il suo scope.clickFunc) che fa qualcosa a seconda di cosa avresti bisogno. '$ location' dovrà anche essere iniettato nella direttiva. – Ashesh

1

usare sia collegamento come risposta da @Ashesh o semplicemente aggiungere portata. Se imposti l'ambito falso non avrai un ambito isolato e il clic funzionerà su direttiva.

directives.directive('myTop',function($compile) { 
return { 
    restrict: 'EA', 
    scope: false, 
    templateUrl: 'views/header.html', 
    } 
}) 
Problemi correlati