2012-11-28 51 views
23

Tôi có ứng dụng Rails/AngularJS hoạt động tốt trong môi trường phát triển cục bộ. Tuy nhiên, khi tôi triển khai ứng dụng này để Heroku các AngularJS không hoạt động một lợi nhuận lỗi này:Lỗi nhà cung cấp không xác định khi triển khai ứng dụng Rails/AngularJS đến Heroku

Unknown provider: eProvider <- e 

tôi đã làm một chút nghiên cứu và có vẻ như nó có cái gì để làm với các precompiling và việc rút gọn của tài sản nhưng tôi không biết phải làm gì để giải quyết vấn đề này. Bất kỳ ý tưởng? Cảm ơn!

Đây là cách điều khiển trông:

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

Và đây là mã trong giao diện:

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

Cập nhật: Tôi đã thay đổi bộ điều khiển để điều này, nhưng với kết quả tương tự:

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

Ứng dụng của bạn có thể hiển thị ở mọi nơi để chúng tôi có thể xem không? –

+0

Hiện tại, tôi đã "giải quyết" nó bằng cách không nén nội dung. Đây không phải là vấn đề đối với một ứng dụng dùng thử đơn giản, nhưng không phải là một tùy chọn cho một ứng dụng thực. – John

+0

Xem liệu http://stackoverflow.com/questions/12339272/angular-js-unknown-provider có giúp ích gì không. –

Trả lời

27

Theo AngularJS hướng dẫn (http://docs.angularjs.org/tutorial/step_05) bạn có thể thêm video này vào bộ điều khiển để ngăn chặn vấn đề việc rút gọn:

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

hoặc thay vì định nghĩa một hàm như thế này:

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

cần được thực hiện như sau:

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

Đảm bảo bạn cũng áp dụng mẫu này cho các bộ điều khiển chỉ thị cụ thể! – tsikov

+2

Làm cách nào để biết tệp nào đã ném lỗi này? Nó được hiển thị như thể nó đang ở trên application.js – Aleksandrus

5

Bạn có thể xác định bộ điều khiển của mình là FooController = function($http) {}, bạn nên xác định là FooController = ["$http", function($http){}]

Xem mroe here

+0

Xem cập nhật của tôi trong câu hỏi – John

+0

Vì lỗi là với nhà cung cấp, nên có trên 'module.config'. PS: Kiểu khai báo mảng là tốt nhất cho trường hợp này;) –

5

Nhóm góc (và cũng thường nói) khuyên chúng tôi không gây ô nhiễm phạm vi toàn cầu.

phương pháp .controller,

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

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

làm việc tốt cho tôi. Tài liệu này được ghi trên Angular Understanding Controllers documentation

Các vấn đề liên quan