2013-06-08 19 views
9

Czy można utworzyć prywatną funkcję wewnątrz dyrektywy? Muszę wykonać dość skomplikowany proces w dyrektywie, aby wypełnić szablon dyrektywy.Tworzenie prywatnej funkcji wewnątrz dyrektywy

coś takiego (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)}}' 
      + ' ... ' 
    } 
}]) 

Gdzie mogę umieścić calculatestuff?

Odpowiedz

13

Należy zauważyć, że directive(directiveName, directiveFunction) używa tylko tego, co zwraca directiveFunction. Możesz robić, co chcesz wewnątrz tej funkcji, jak na przykład zdefiniować inną funkcję:

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

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

Ale oczywiście calculateStuff nie będzie istniał już podczas cykli $digest i nie odwołuje się do zakresu, tak cię nie będzie można wywołać go wewnątrz szablonu. Jeśli tak jest naprawdę to, co chcesz zrobić, kontemplować, aby umieścić swoje funkcje w zakresie, w fazie łączącej:

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

Ponieważ używasz wyizolowaną zakres, funkcja ta nie będzie dostępne z zewnątrz dyrektywy.

+0

Próbowałem tego, ale wynik końcowy w przeglądarce jest pusty :( –

+0

Masz rację, jestem trochę zmęczony, zredagowałem swoją odpowiedź :). – Blackhole

+0

Po przeniesieniu funkcji do zakresu w łączu działa. Dzięki! –

Powiązane problemy