小编典典

在应用配置Angular.js中的自定义提供程序中使用$ http

javascript

主要问题-可能吗?我没有运气就尝试了..

主app.js

...
var app = angular.module('myApp', ['services']);
app.config(['customProvider', function (customProvider) {

}]);
...

提供者本身

var services = angular.module('services', []);
services.provider('custom', function ($http) {
});

而且我有这样的错误:

Uncaught Error: Unknown provider: $http from services

有任何想法吗?

谢谢!


阅读 295

收藏
2020-05-01

共1个答案

小编典典

底线是:

  • 不能 将服务注入提供者配置部分
  • CAN 注入服务成初始化提供者的服务的部分

细节:

Angular框架有两个阶段的初始化过程:

阶段1:配置

在此config阶段,将初始化所有提供程序,并config执行所有部分。这些config部分可能包含配置提供程序对象的代码,因此可以将它们与提供程序对象一起注入。但是,由于提供者是服务对象的工厂,并且在此阶段,提供者尚未完全初始化/配置->
**您不能在此阶段要求提供者为您创建服务-

在配置阶段您不能使用/注入服务**。此阶段完成后,所有提供程序都准备就绪(配置阶段完成后,无法再进行任何提供程序配置)。

第二阶段:跑步

run阶段期间,run将执行所有部分。在此阶段 ,提供者已准备就绪,可以创建服务- >在此run阶段,您可以使用/注入服务

例子:

1.将$http服务注入提供者初始化功能 无法正常工作

//ERRONEOUS
angular.module('myModule').provider('myProvider', function($http) {
    // SECTION 1: code to initialize/configure the PROVIDER goes here

(executed during config phase)

    this.$get = function() {
        // code to initialize/configure the SERVICE goes here (executed

during run stage)

        return myService;
    };
});

由于我们试图将$http服务注入到在该config阶段执行的函数中,因此会出现错误:

Uncaught Error: Unknown provider: $http from services

该错误实际上是在说$httpProvider用于创建$http服务的尚未准备就绪(因为我们仍处于config阶段中)。

2.将$http服务注入服务初始化功能 起作用:

//OK
angular.module('myModule').provider('myProvider', function() {
    // SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
    ...

    this.$get = function($http) {
        // code to initialize/configure the SERVICE goes here (executed during `run` stage)

        return myService;
    };
});

由于我们现在将服务注入到服务初始化函数中,该函数在run阶段中执行,因此该代码将起作用。

2020-05-01