【问题标题】:Cannot get $get method called automatically in angularjs provider无法在 angularjs 提供程序中自动调用 $get 方法
【发布时间】:2016-10-06 11:36:06
【问题描述】:

这是我在 angularjs 1.5.5 中编写的一段代码:

export default angular.module(
  'myApp', [])
  .provider('finder', function finderProvider() {
    this.$get = $get;

    function $get() {
      console.log('GET');
    }

    this.callMe = () => {
      console.log('CALLED');
    };
  })
  .config(['finderProvider', function(finderProvider) {
    //finderProvider.$get();
    finderProvider.callMe();
  }])
  .name;

我稍后会尝试将服务注入此提供程序。我在文档中读到我只能使用 $get() 方法在提供程序中注入服务。但是,我不能自动调用 $get() 。我可以让这个工作的唯一方法是在我评论调用的部分手动调用 $get() 。但手动调用 $get 对我来说似乎不合适。

在此示例中,仅记录了“CALLED”。知道我在这里缺少什么吗?

编辑。我尝试使用箭头函数使用另一种语法,但得到了相同的结果:

.provider('finder', () => {
    return {
      $get: () => {
        console.log('GET');
      },
      callMe: () => {
        console.log('CALLED');
      }
    };
  })

提前致谢。

【问题讨论】:

  • 粗箭头对待this的方式与对待函数的方式不同。如果您将第一个示例也更新为粗箭头,会发生什么情况?
  • @DavidL 我尝试使用箭头函数更改它,但得到相同的结果。我用我的新更改更新了我原来的帖子。
  • 您在此处发布的内容肯定不止这些。没有理由不这样做。
  • @DavidL 谢谢。实际上我的代码没有任何问题。我将此提供程序用作 config()。这就是没有使用 $get 的原因。

标签: angularjs dependency-injection get provider


【解决方案1】:

Angular 服务被延迟实例化。

服务提供者构造函数在配置阶段注入时被调用(config 块或其他提供者)。

在配置阶段后注入服务实例时调用$get

在上面的示例中,finder 服务没有注入任何地方,没有创建服务实例,也没有调用 $get 函数。

【讨论】:

  • 在我的示例中,我在以下行中注入了提供:.config(['finderProvider', function(finderProvider)。看起来 AngularJS 自动添加了“Provider”后缀。我应该注入我的提供者使用其他语法?
  • finderProviderfinder 是两个不同的东西。第一个是服务提供者,另一个是服务实例。 finderProvider 可以注入到config 块中,finder 可以注入到run 块中,不能横向注入。
  • 感谢您的澄清。我只在 config() 中使用了我的提供程序,这就是为什么没有使用 $get() 的原因。当 $get() 不存在时,我发现它为什么会引发错误有点令人困惑。因为当 $get() 在那里时,它没有被使用。我希望我早点知道这一点。
  • 这可能会造成混淆,因为provider 是您定义finderProvider 提供者(作为构造函数)和finder 实例(作为$get 函数)的唯一地方,它们是不同的各种注射剂。
猜你喜欢
  • 2018-03-09
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2014-02-10
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多