You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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');
    };
}]);

关键修正点说明

  1. 移除Service中的$scope依赖:Service只保留需要的$http依赖,避免了依赖注入找不到Provider的错误。
  2. 用Promise的then方法处理异步结果:$http.get()的响应数据都在response.data里,通过.then()可以正确拿到并赋值给作用域变量。
  3. 增加错误捕获:.catch()方法可以帮你快速排查请求失败的原因,比如URL错误、跨域问题等。

内容的提问来源于stack exchange,提问作者Shakeer Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:07:57