2012-11-28 16 views
23

Ho un'app Rails/AngularJS che funziona perfettamente nell'ambiente di sviluppo locale. Tuttavia, quando schiero questa applicazione per la Heroku AngularJS non funziona un restituisce questo errore:Errore provider sconosciuto durante la distribuzione dell'app Rails/AngularJS su Heroku

Unknown provider: eProvider <- e 

ho fatto un po 'di ricerca e sembra che abbia qualcosa a che fare con la precompilazione e minimizzazione dei beni , ma non so cosa fare per risolvere questo. Qualche idea? Grazie!

Questo è come il controller appare:

function RemindersCtrl($scope, $http) { 
    $http.get('/reminders.json').success(function(data) { 
    $scope.reminders = data; 
    console.log(data); 
    }); 
} 

E questo è il codice nella visualizzazione:

%section.reminders 
     %div{"ng-controller" => "RemindersCtrl"} 
     %ul 
      %li{"ng-repeat" => "reminder in reminders"} 
      .title {{reminder.title}} 

Update: ho cambiato il controller per questo, ma con lo stesso risultato:

var RemindersCtrl = function($scope, $http) { 
    $http.get('/reminders.json').success(function(data) { 
    $scope.reminders = data; 
    console.log(data); 
    }); 
} 
RemindersCtrl.$inject = ['$scope','$http']; 
+0

La tua app è visibile ovunque, quindi possiamo dare un'occhiata? –

+0

Per ora, l'ho "risolto" non comprimendo le risorse. Questo non è un problema per una semplice app di prova, ma non è un'opzione per un'app reale. – John

+0

Vedere se http://stackoverflow.com/questions/12339272/angular-js-unknown-provider aiuta. –

risposta

27

Secondo AngularJS tutorial (http://docs.angularjs.org/tutorial/step_05) è possibile aggiungere questo al controller per evitare problemi minification:

function RemindersCtrl($scope, $http) { 
    ... 
} 
RemindersCtrl.$inject = ['$scope', '$http']; 

o al posto di definire una funzione come questa:

function RemindersCtrl($scope, $http) { 
    ... 
} 

dovrebbe essere fatto in questo modo:

var RemindersCtrl = ['$scope', '$http', function($scope, $http) { 
    ... 
}]; 
+0

Assicurati di applicare questo modello anche ai controller specifici della direttiva! – tsikov

+2

Come posso sapere quale file ha generato questo errore? Viene mostrato come se fosse su application.js – Aleksandrus

5

Probabilmente stai definendo il controller come FooController = function($http) {}, dovresti definire come FooController = ["$http", function($http){}]

See mroe here

+0

Vedere il mio aggiornamento nella domanda – John

+0

Poiché l'errore è con il provider, dovrebbe essere su 'module.config'. PS: lo stile di dichiarazione Array è il migliore in questo caso;) –

5

Il team angolare (e anche in generale) raccomanda di non inquinare l'ambito globale.

metodo .controller,

var myApp = angular.module('myApp',[]); 

myApp.controller('GreetingCtrl', ['$scope', function($scope) { 
    $scope.greeting = 'Hola!'; 
}]); 

funzionato bene per me. Questo è documentato su Angular Understanding Controllers documentation

Problemi correlati