2013-07-27 9 views
15

Definisco un servizio clienti denominato "saluto", ma non riesco a ottenere l'istanza da $ injector.get ('saluto'). Viene generato tale errore: Fornitore sconosciuto: greetingProvider < - saluto. Quindi qual è il modo giusto per ottenerlo? Segue il codice:

var app = angular.module('myDI', []); 
app.config(function($provide){ 
    $provide.provider('greeting', function(){ 
     this.$get = function(){ 
      return function(name) { 
       console.log("Hello, " + name); 
      }; 
     }; 
    }); 
}); 

var injector = angular.injector(); 
var greeting = injector.get('greeting'); 
greeting('Ford Prefect'); 
+2

Stai chiedendo a un iniettore senza passare alcun modulo. Ma il tuo servizio di saluto è definito nel modulo myDI. Vedi http://docs.angularjs.org/api/angular.injector –

+3

Ancora più importante: perché stai cercando di usare 'injector' direttamente? È molto, molto raro giocarci al di fuori di un test unitario ... Vedi anche http://stackoverflow.com/q/13400687/1418796 –

risposta

24

È necessario creare l'iniettore dal modulo.

var app = angular.module('myDI', []); 
app.config(function($provide){ 
    $provide.provider('greeting', function(){ 
     this.$get = function(){ 
      return function(name) { 
       console.log("Hello, " + name); 
      }; 
     }; 
    }); 
}); 
var injector = angular.injector(['myDI', 'ng']); //Add this line 
var greeting = injector.get('greeting'); 
greeting('Ford Prefect'); 
var injector = angular.injector(); 

Provalo qui. FIDDLE

+1

sembra che anche angular.injector (['myDI']) funzioni bene , non è necessario 'ng' – jason

+0

@jason Buono a sapersi. Non l'ho provato Ma il punto è assicurarsi di ottenere il provider dal modulo di salvataggio. – zsong

+3

Questo ha smesso di funzionare in angolare 1.3.X https://github.com/angular/angular.js/issues/9692 – httpete

Problemi correlati