2012-11-28 30 views
23

我有一個Rails/AngularJS應用程序,可以在本地開發環境中正常工作。 然而,當我這個應用程序部署到Heroku上的AngularJS不起作用的返回此錯誤:向Heroku部署Rails/AngularJS應用程序時出現未知的提供程序錯誤

Unknown provider: eProvider <- e 

我做了一些研究,似乎它是與資產的預編譯和縮小,但我不知道該怎麼做才能解決這個問題。有任何想法嗎?謝謝!

這是控制器的外觀:

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

而且這是在視圖代碼:

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

更新:我改變了控制器這一點,但結果相同:

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

您的應用程序可以在任何地方看到,所以我們可以看看? –

+0

現在,我通過不壓縮資產來「解決」它。這對於簡單的試用應用程序來說不成問題,但不適用於真實應用程序。 – John

+0

看看http://stackoverflow.com/questions/12339272/angular-js-unknown-provider有幫助。 –

回答

27

根據AngularJS教程(http://docs.angularjs.org/tutorial/step_05),你可以將其添加到控制器,以防止微小的問題:或

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

而不是定義這樣的功能:

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

它應該這樣做:

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

請確保您也將此模式應用於指令特定的控制器! – tsikov

+2

我怎麼知道哪個文件拋出了這個錯誤?它顯示爲在application.js上 – Aleksandrus

5

您可能將您的控制器定義爲FooController = function($http) {},您應該將其定義爲FooController = ["$http", function($http){}]

見MROE here

+0

在我的問題 – John

+0

中查看我的更新由於錯誤與提供者有關,所以應該在'module.config'上。 PS:對於這種情況,Array聲明風格是最好的;) –

5

有角度的團隊(也一般來說)建議我們不污染全球範圍。

.controller方法,

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

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

爲我工作得很好。這是記錄在Angular Understanding Controllers documentation

相關問題