2013-06-08 34 views
9

Yönergede özel işlev oluşturmak mümkün mü? Direktifin şablonunu doldurmak için bir direktif içinde oldukça karmaşık bir süreç yapmam gerekiyor. Bu (HTML) gibiYönergede özel işlev oluşturma

şey:

<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)}}' 
      + ' ... ' 
    } 
}]) 

Ben calculatestuff koyabilirsiniz?

cevap

13

directive(directiveName, directiveFunction)'un yalnızca directiveFunction döndürdüğüne dikkat edin. Bu işlev içinde ne istersen yapabilirsin, gibi, mesela, başka işlevi tanımlayın:

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

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

Ama sizi elbette calculateStuff$digest döngüleri sırasında artık yok edecek ve kapsam bağlantı vermiyor, bu yüzden şablonunuzun içinde arama yapamazsınız. Bu size ne yapmak istediğini gerçekten ise, bağlama aşamasında, kapsam içinde işlevini koymak için düşünmek: Eğer izole bir kapsamını kullandığından

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

, bu fonksiyon direktifi dışından erişilebilir olmayacaktır.

+0

Bunu denedim ama sonuç tarayıcıda boş :( –

+0

Haklısın, biraz yorgunum. Cevabımı düzenledim :). – Blackhole

+0

İşlevi bağlantı içindeki kapsama taşıdıktan sonra çalışır. Teşekkürler! –