0

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

非常感谢 !

4

1 回答 1

0

@estus 发现了服务/提供商问题。提供者的文档告诉我们,当提供者被实例化时,服务还不存在。并且在创建服务时,不允许与提供者进行交互。

从文档:

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

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

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


此外,至于为什么this.initial不起作用,提供者公开$get方法中返回的内容。

于 2016-08-01T22:40:40.937 回答