15

Sto provando a passare una funzione di callback da un controller a una direttiva.Passa la funzione di callback alla direttiva

Ecco il codice funzione di callback: utilizzo

$scope.onImageSelect = function(image) { 
    alert('SET'); 
    $scope.card.image = image; 
}; 

direttiva:

<google-image-search callback="onImageSelect" /> 

codice direttiva:

ngmod.directive('directive', function() { 
    return { 
     templateUrl: '/templates/template.html', 
     scope: { 
      callback: '&' 
     } 
    } 
}); 

utilizzo richiamata nel modello:

<a data-ng-click="callback(url)"></a> 

Tuttavia, questo mi dà il seguente errore:

TypeError: Cannot use 'in' operator to search for 'onImageSelect' 

Ho visto un sacco di domande simili, ma non riusciva a capire dove mi sbaglio.

+0

non sono sicuro di quello che stai chiedendo ... come viene attivato che callback? Cos'è il 'callback (url)'? – tymeJV

+0

onImageSelect dovrebbe essere una funzione suImageSelect() non una variabile – Fals

risposta

25

Mentre chiamando il metodo espressione dalla direttiva è necessario passare il parametro dalla direttiva in formato JSON, inoltre si dovrebbe correggere il valore della direttiva callback attributo per passare funzione come utilizzo callback="onImageSelect(image)"

direttiva:

<google-image-search callback="onImageSelect(image)" /> 

direttiva Template

<a data-ng-click="callback({image: url})"></a> 
-6

tenta di modificare l'oggetto ambito per essere come questo

scope: { 
     callback: '=' 
    } 

e funzionerà

+2

perché tutti i voti negativi?Ho provato questo e funziona! grazie, Ahmed. È perfettamente legittimo passare una funzione tramite '=' –

+0

La sua buona pratica per passare la funzione come '&' (espressione) –

-4

Molti AngularJs gli sviluppatori conoscono già le direttive AngularJs e probabilmente conoscono l'ambito della direttiva e i suoi metodi.

Come sapete, ci sono 3 metodi AngularJs portata direttiva: '@', '=', '&', ma ora ci accingiamo a parlare solo '&' method.we stanno andando a vedere, il modo in cui può implementare il metodo '&' nelle nostre applicazioni.

Quando definiamo una funzione all'interno dell'ambito corrente e vogliamo implementarla in qualsiasi direttiva, ricorda una cosa: devi prestare attenzione agli argomenti della tua funzione e al loro ordine. Se vuoi di più, ecco un grande articolo a riguardo:

http://www.w3docs.com/snippets/angularjs/angularjs-directive-scope-method.html

+0

Suggerirei che qualsiasi risposta dovrebbe qui fornire la sua risposta direttamente piuttosto che delegarla ad un collegamento esterno. Come puoi vedere, alcuni voteranno per il caso successivo. –

+0

In realtà l'ordine non ha importanza, perché gli argomenti vengono passati per nome, non per ordine. –

Problemi correlati