2013-06-08 15 views
9

È possibile creare una funzione privata all'interno di una direttiva? Ho bisogno di fare un processo piuttosto complesso all'interno di una direttiva per riempire il modello della direttiva.Creazione di una funzione privata all'interno della direttiva

Qualcosa di simile (HTML):

<textarea the-result="data"> 
</textarea> 

Javascript:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
      // calculatestuff = function(d){ // ... } can't put it here (error) 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ' 
    } 
}]) 

Dove posso mettere calculatestuff?

risposta

13

Si noti che directive(directiveName, directiveFunction) utilizza solo i resi directiveFunction. Si può fare quello che vuoi dall'interno di questa funzione, come, per esempio, definire un'altra funzione:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    var calculateStuff = function (d) { 
     // ... 
    }; 

    return { 
     // ... 
    } 
}]); 

Ma, naturalmente, calculateStuff non esisterà più durante i cicli $digest e non è un collegamento al campo di applicazione, in modo da non sarà in grado di chiamarlo all'interno del tuo modello. Se questo è davvero quello che si vuole fare, contemplare per mettere la vostra funzione nel campo di applicazione, durante la fase di collegamento:

angular 
.module("MyModule") 
.directive("theResult", [function() { 
    return { 
     scope: { 
      theResult: "=" 
     }, 
     template: ' ... ' 
      + '{{calculatestuff(theResult.someproperties)}}' 
      + ' ... ', 
     link : function ($scope) { 
      $scope.calculateStuff = function (d) { 
       // ... 
      }; 
     } 
    } 
}]); 

Dal momento che si utilizza un ambito isolato, questa funzione non sarà accessibile dall'esterno della direttiva.

+0

Ho provato questo, ma il risultato finale nel browser è vuoto :( –

+0

Hai ragione, sono un po 'stanco. Ho modificato la mia risposta :). – Blackhole

+0

Dopo aver spostato la funzione nello scope all'interno del collegamento, funziona. Grazie! –

Problemi correlati