AngularJS中如何在Service调用$http.get()?注入Service报错求排查
解决AngularJS Service依赖注入错误及$http调用问题
嘿,我来帮你搞定这个问题~你遇到的[$injector:unpr]错误,根源和代码里的两个关键问题有关,我给你拆解下:
错误原因分析
- Service不能注入$scope:AngularJS里的Service是全局单例,不属于任何控制器的作用域,
$scope只能注入到控制器、指令这类和视图绑定的组件中。你在myhttpService里注入$scope,Angular找不到对应的Provider,直接抛出了依赖注入未找到的错误。 - 直接赋值Promise对象:
$http.get()返回的是一个Promise异步对象,你直接把它赋值给$scope.myHttpMessage,不仅拿不到实际数据,还会导致后续处理异常,必须用Promise的.then()方法来处理异步返回的结果。 - 代码里的
functi...是明显的拼写错误,要补全为function。
修正后的完整代码
var app = angular.module("myApp", []); // 控制器:正确处理Service返回的Promise app.controller("myCntlr", ['$scope', 'myhttpService', function ($scope, myhttpService) { // 调用Service的HTTP方法,用then接收异步数据 myhttpService.httpGetService() .then(function(response) { // 响应数据存在response.data中,赋值给scope变量 $scope.myHttpMessage = response.data; }) .catch(function(error) { // 可选:处理请求失败的情况 console.error('HTTP请求失败:', error); }); }]); // Service:移除无效的$scope注入,正确封装$http请求 app.service("myhttpService", ['$http', function ($http) { this.httpGetService = function() { // 替换成你的实际API地址 return $http.get('https://your-target-api-url.com/data'); }; }]);
关键修正点说明
- 移除Service中的$scope依赖:Service只保留需要的
$http依赖,避免了依赖注入找不到Provider的错误。 - 用Promise的then方法处理异步结果:
$http.get()的响应数据都在response.data里,通过.then()可以正确拿到并赋值给作用域变量。 - 增加错误捕获:
.catch()方法可以帮你快速排查请求失败的原因,比如URL错误、跨域问题等。
内容的提问来源于stack exchange,提问作者Shakeer Hussain
相关产品推荐
相关产品推荐

