2013-08-20 2 views
31

Qual è la differenza funzionale tra il seguente codice (in Widget Uno) utilizzando una definizione di oggetto direttiva (credo che si chiama ..?) ...Differenze tra la restituzione di un oggetto e una funzione in una definizione di direttiva?

angular.module("app"). 
    directive("widgetUno", ["$http", function ($http) { 
     return { 
       // A whole bunch of crap going on here 
      }, 
      templateUrl: "widgetUno.html" 
     }; 
    }]); 

... E questo codice in Widget dos?

angular.module("app").directive('widgetDos', function($http) { 
    return function(scope, element, attrs) { 
     // A whole bunch of crap going on here 
    }; 
}); 

Sto cercando di convertire una direttiva che è come Widget Uno in Widget Dos, ma dove posso fare riferimento al TemplateURL? È possibile in Widget Dos?

risposta

42

Il ripristino di una funzione in una direttiva è solo una scorciatoia per la funzione link nella definizione completa.

Se si specifica qualcosa diverso un link funzione (come templateUrl) allora avete bisogno di scrivere la strada più lunga:

angular.module("app"). 
    directive("widgetUno", ["$http", function ($http) { 
     return { 
      link: function(scope, element, attrs) { 
      // A whole bunch of crap going on here 
      }, 
      templateUrl: "widgetUno.html" 
     }; 
    }]); 

Questa differenza è in realtà documentata qui - http://docs.angularjs.org/guide/directive

1

Dovrebbe funzionare in questo modo:

angular.module("app").directive('widgetDos', function($http) { 
    return { 
     templateUrl: "....", 
     link: function(scope, element, attrs) { 
      // A whole bunch of crap going on here 
     }; 
    } 
}); 

Vedi anche http://docs.angularjs.org/guide/directive (versione lunga). C'è un esempio.

8

Il restituire la funzione è in realtà la scorciatoia per:

angular.module("app").directive('widgetDos', function($http) { 
    return { 
     link: function(scope, element, attrs) { 
      //... 
     }; 
    } 
}); 

Usalo nel caso in cui la tua direttiva non abbia bisogno di template, controller ecc. A parte questo, non c'è assolutamente alcuna differenza funzionale tra questi due approcci di chiamata.