AngularJS创建loginService时出现[$injector:unpr]错误求助
解决AngularJS Service中注入$scope导致的[$injector:unpr]错误
你碰到的这个[$injector:unpr]错误,本质原因很明确:AngularJS的Service是绝对不能注入$scope的。$scope是控制器(Controller)专属的依赖,用来管理视图与控制器之间的数据绑定,而Service作为全局单例服务,本身没有$scope的运行环境,强行注入会让依赖注入器找不到对应的提供者,直接抛出错误。
先看你代码里的两个核心问题:
- 在
loginService的依赖里添加了$scope,这完全是多余的,也是触发错误的根源; $http.post返回的是Promise对象,你直接返回promise.data是无效的——异步请求未完成时,data属性根本不存在,必须通过Promise的then方法来获取响应数据。
给你修正后的完整代码:
App.service('loginService', function($http) { this.login = function(user) { var request = { "user": user.id, "password": user.pass }; // 返回Promise,调用方可以通过then获取异步返回的数据 return $http.post("http://vlinux:9099/Authenticate", request) .then(function(response) { return response.data; }); } });
在对应的控制器里,你可以这样调用这个服务(这里的$scope是控制器的依赖,完全合法):
App.controller('LoginController', function($scope, loginService) { $scope.user = {}; $scope.handleLogin = function() { loginService.login($scope.user) .then(function(authData) { // 登录成功后的逻辑,比如存储用户信息、跳转页面 console.log('认证成功', authData); }) .catch(function(error) { // 处理登录失败的情况 console.error('认证失败', error); }); }; });
总结一下关键要点:
- Service只负责封装业务逻辑和数据请求,不需要也不能依赖
$scope - 异步请求必须通过Promise的链式调用处理结果,不能直接取未完成Promise的
data属性
内容的提问来源于stack exchange,提问作者Soham Banerjee
相关产品推荐
相关产品推荐

