Angular Provider-$get返回对象时未定义$http



如果$get是这样配置的:

配置:

.config( function( authProvider ){
    authProvider.initial();
})

提供商:

.provider('auth', function() {
  this.initial = function() {
    obj.user = JSON.parse( localStorage.getItem('user') );
  }
  var obj = {
    get: function() {
      return this.user;
    },
    set: function( userData ) {
      this.user = userData;
      localStorage.setItem( 'user', JSON.stringfiy( userData ) );
    },
    send: function( data ) {
      $http.post( 'user/' + data )
        .then(  res => {  //  Arrow Functions 
          this.set(res.data);
        };
    },    
  };
  this.$get = function( $http ) {
    return obj;
  }
})

我收到$http is not defined错误-当send()调用时

如果是这样的话:

.provider('auth', function() {
  // This method will not work !
  this.initial = function() {
    obj.user = JSON.parse( localStorage.getItem('user') );
  }
  this.$get = function( $http ) {
    return
    {
        get: function() {
          return this.user;
        },
        set: function( userData ) {
          this.user = userData;
          localStorage.setItem( 'user', JSON.stringfiy( userData ) );
        },
        send: function( data ) {
          $http.post( 'user/' + data )
            .then(  res => {  //  Arrow Functions 
              this.set(res.data);
            };
        }    
    };
  }
})

我没有错误

this.initial()不起作用。

因为它无法访问$get方法返回的对象。。

所以我的问题是:

  1. 为什么第一个例子会给我一个错误?

  2. 我该怎么做?

非常感谢!

@estus对服务/提供商问题一针见血。关于提供者的文档告诉我们,当提供者被实例化时,服务还不存在。在创建服务时,不允许与提供者进行交互。

来自文档:

在应用程序引导过程中,在Angular开始创建所有服务之前,它会配置和实例化所有提供程序。我们称之为应用程序生命周期的配置阶段。在此阶段,由于尚未创建服务,因此无法访问这些服务。

一旦配置阶段结束,就不允许与提供者进行交互创建服务开始。我们将应用程序生命周期的这一部分称为运行阶段。

如果你需要访问其他服务,似乎你需要创建一个服务/工厂,而不是一个提供商。


此外,关于this.initial不起作用的原因,提供程序公开$get方法中返回的内容。

相关内容

  • 没有找到相关文章

最新更新