【问题标题】:Unknown $http Provider in AngularAngular 中的未知 $http 提供程序
【发布时间】:2016-08-16 07:26:07
【问题描述】:

我需要在配置方法中使用$http 服务。但我不能在配置中使用$http,我收到unknown Provider 错误消息。

我的代码:

.config(function($http, $routeProvider, $provide) {
    $http.get("sampleslist.js").success(function(data) {
        var loop = 0, currentRoute;

        for (loop = 0; loop < data[loop].pages.length; loop++) {
            currentRoute = data[loop].pages;

            var routeName = "/" + currentRoute[loop].name;
            $routeProvider.when(routeName, {
                templateUrl:"/" + currentRoute.name + ".html",
            })
        }
    })

    app = {controller: $controllerProvider.register}
})

您能提供解决方案吗?

【问题讨论】:

  • 嗯,正如你所说,你不能在配置阶段使用 $http。不过,您可以在运行阶段使用它。

标签: javascript angularjs angularjs-directive angular-routing


【解决方案1】:

.config 中使用$http 不是一个好习惯。可以在.run 中使用它,也可以通过.service.factory 使用该服务。

【讨论】:

  • 这与实践无关。我们不能在 .config 中注入 $http。
【解决方案2】:

如果只需要发出 AJAX 请求,您实际上可以从新注入器中检索 $http 服务器:

.config(function($routeProvider, $provide) {
    var $http = angular.injector(['ng']).get('$http');
    $http.get("sampleslist.js").success(

        function(data) {

            var loop = 0,
                currentRoute;

            for (loop = 0; loop < data[loop].pages.length; loop++) {

                currentRoute = data[loop].pages;

                var routeName = "/" + currentRoute[loop].name;

                $routeProvider.when(routeName, {

                    templateUrl: "/" + currentRoute.name + ".html",

                })
            }
        })

    app = {
        controller: $controllerProvider.register,
    }
})

【讨论】:

  • $routeProvider.when(routeName, { }) 这个函数没有命中,为什么?
  • 我什至不建议 OP 规避 Angular 设置的(有意的)限制;即使那样,success 也是一种已弃用的方法,不应使用。以这种方式访问​​$http 似乎很危险……
【解决方案3】:

我们不能在配置中使用 http。更多详情请查看此链接:

use $http inside custom provider in app config, angular.js

【讨论】:

    【解决方案4】:

    您只能在 .config 文件中注入提供程序。但 $http 不是提供者,您的 Angular 应用程序正在搜索名为 $http 的提供者,但无法找到它,因此引发了错误。

    如何解决?

    如果您想要在加载角度控制器之前进行任何 ajax 调用,您可以在 .run 中进行

    【讨论】:

    • 据我所知/阅读,这是他的角度工作流程。上面我想说的是,你可以在控制器加载之前运行一些东西。我应该提到数据而不是页面加载。 app.config() app.run() 指令的编译函数(如果在 dom 中找到) app.controller() 指令的链接函数(再次,如果找到)
    【解决方案5】:

    您可以控制sampleslist.js 吗?如果是,也许只需使用标签下载它并将值分配给变量。

    //sampleslist.js
    var samplelist = {...}
    
    //index.html
    <script src="samplelist.js"></script>
    

    然后您可以使用angular.constant 将此值注入到角度,或者只使用变量samplelist

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多