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

时间:2016-05-08 20:50:39

标签: angularjs angular-http angular-providers

如果$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. 我该怎么做?

  3. 非常感谢!

1 个答案:

答案 0 :(得分:0)

@estus是服务/提供商问题的焦点。 http://getbootstrap.com/css/#images告诉我们,当实例化提供者时,服务还不存在。在创建服务时,不允许与提供商进行交互。

来自文档:

  

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

     

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

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

此外,至于为什么this.initial无效,提供商会公开$get方法中返回的内容。