我收到了未知提供商
Error: [$injector:unpr] http://errors.angularjs.org/1.4.8/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20RfcDataService
使用以下代码。有人可以指导我这里有什么问题吗?
var RFC = angular.module('rfcApp', []); RFC.service('RfcDataService', function($scope, $http) { this.getUserData = function($http) { $http.get("http://myserver:8080/UserPrefs?jid=fcc").then(function(response) { return response.data; }); }; this.getHomeData = function($scope) { angular.forEach($scope.rfcData, function(singleItem) { if (singleItem.dataFor === 'Home') { $scope.homeTabs = (singleItem.tabs); } }); }; } RFC.controller('RfcMainController', ['$scope', '$http', '$sce', 'RfcDataService', function($scope, $http, $sce, RfcDataService) { $scope.rfcData = RfcDataService.getUserData($http); RfcDataService.getHomeData($scope); }
答案 0 :(得分:2)
首先:
从$http
功能中移除getUserData
- 它已经在范围内,无论如何您的服务功能都无法注入。
如果您使用查询字符串参数调用$http
,则将其作为第二个参数传递
您的getUserData
函数应该返回一个承诺:
this.getUserData = function() {
return $http.get("http://myserver:8080/UserPrefs", {jid:'fcc'}).then(function(response) {
return response.data;
});
};
你可以这样简化:
this.getUserData = function() {
return $http.get("http://myserver:8080/UserPrefs", {jid:'fcc'});
};
然后使用如下结果:
RfcDataService.getUserData().success(function(result) {
$scope.rfcData = result;
});
答案 1 :(得分:0)
您正在尝试将$scope
注入服务中。你不能这样做,因此错误。正确的服务代码:
var RFC = angular.module('rfcApp', []);
RFC.service('RfcDataService', function($http) {
this.getUserData = function() {
$http.get("http://myserver:8080/UserPrefs?jid=fcc").then(function(response) {
return response.data;
});
};
});
RFC.controller('RfcMainController', ['$scope', '$http', '$sce', 'RfcDataService', function($scope, $http, $sce, RfcDataService) {
$scope.rfcData = RfcDataService.getUserData($http).then(function() {
angular.forEach(data, function(singleItem) {
if (singleItem.dataFor === 'Home') {
$scope.homeTabs = singleItem.tabs;
}
});
});
}]);
注意,您如何使用getUserData
方法返回的promise object。您在$http
方法中也不需要getUserData
参数。