2014-11-08 2 views
3

Я знаю, что подобные вопросы об этой ошибке неоднократно задавались в SO, и я прочитал ответы, но, насколько я могу видеть, мой код разработан правильно. Но, конечно, это не так, потому что я получаю эту ошибку. У моего приложения несколько сервисов и несколько контроллеров, и по какой-то причине они работают отдельно от одного конкретного сервиса/контроллера. Я смог свести код к минимуму, как показано ниже. Ошибка возникает, когда TestController срабатывает с точки зрения с .. ng-controller="TestController" .. и сообщение об ошибке в консоли Chrome является:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.15/ $injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20Loyper at Error (native)..

я боролся с этим в течение некоторого времени, и не может видеть, что эту услугу (Loyper) и контроллер (TestController) определяется иначе, чем те, которые работают, с точки зрения инъекций. Любая помощь будет оценена.

var app = angular.module('testapp', [ 
"ngRoute", 
"mobile-angular-ui" 

]); 

app.config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider) { 
$routeProvider. 
when('/', { 
    templateUrl: 'main.html', 
    controller: 'TestController' 
}). 
when('/loyper', { 
    templateUrl: 'loyper.html', 
    controller: 'LoypeController' 
}). 
otherwise({ 
    redirectTo: '/' 
}); 

$httpProvider.defaults.useXDomain = true; 

}]); 

app.service('Loyper', ['$scope', '$http', function($scope, $http) { 

var cached = false; 
var loyper = {}; 
var message; 

return { 
    foo: 'bar' 
} 

}]); 

app.controller('TestController', ['$scope', 'Loyper', function($scope, Loyper) { 

angular.extend($scope, { 
    getLoyper: function() { 
     return Loyper.foo; 
    } 

}); 

$scope.loypelist = $scope.getLoyper(); 

}]); 

ответ

5

услуга не может быть введена с $scope, так как услугой является одноточечной, в то время как каждый контроллер, и многих директив, имеет свой собственный объем. Проблема, таким образом, в этой строке:

app.service('Loyper', ['$scope', '$http', function($scope, $http) { 

, который должен быть

app.service('Loyper', ['$http', function($http) { 

И в самом деле, так как ваша служба не использует $ HTTP, это не должно занять $ HTTP в качестве аргумента либо.

+0

Спасибо @ jb-nizet! Но $ rootScope может иметь смысл вводить в службу, или? Я уверен, что видел это. Btw, $ http используется моим сервисом, я просто удалил код. –

+1

Да, $ rootScope можно вводить в службу. –