[AngularJS面面观] 19. 依赖注入 --- Provider是个啥

本文探讨AngularJS中的Provider,解释其作为处理依赖关系对象的角色。通过对象和构造器函数两种方式声明Provider,分析它们的区别,特别是懒加载的实现。同时介绍了函数柯里化在Provider中的应用。
摘要由CSDN通过智能技术生成

在前面介绍angular中依赖注入相关的概念和细节时,非常多次提到了provider这个概念,每次提到都会让大家再等等,再等等。现在再也等不了啦,从本篇文章开始就会陆续介绍provider和一些基于provider的高层方法,比如servicefactory等等。

provider是什么?

通过对象声明provider

首先,我们来看看provider是什么。在angular中,provider就是知道如何处理依赖关系的一类对象。为啥说是一类对象呢,因为只要一个对象实现了provider规定的契约,那么该对象就可以被称作provider。这个契约也非常的简单:提供一个带有返回值的$get方法即可。

比如下面的对象就是符合要求的provider

{
  $get: function() {
   
    return 'aConstant';
  }
}

上面的对象定义了一个$get方法,该方法返回了一个字符串作为返回值。

现在,我们定义了一个最简单的provider,该如何把这个provider注册到模块中呢?没错,还是通过module实例提供的provider方法:

var app = angular.module('test', []);

// 通过provider提供一个常量的获取方法
app.provider('a', {
  $get: function() {
   
    return 'aConstant';
  }
});

// 直接通过constant定义一个常量
app.constant('b', 'bConstant');

在上述代码中,我们分别使用providerconstant方法定义了常量。比较一下两种方法,看看他们有什么区别?可能会有同学说不就是定义一个常量,有必要大费周章吗?确实,使用provider来定义常量从步骤上而言会繁琐一些,但是它也增加了代码的灵活性不是吗?在计算机领域,有一句名言:”计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”。这句话放在这里也同样试用,如果因为种种原因常量的定义不能在直接在代码中确定,那么将这个定义的过程延迟到$get方法中不就是一种合理的解决方案吗?这里provider的作用就是提供这一间接的中间层。

现在我们回头看看module类型中是如何定义provider方法的:

provider: invokeLaterAndSetModuleName('$provide', 'provider')

// invokeLaterAndSetModuleName本身也是一个函数,返回另一个函数
function invokeLaterAndSetModuleName(provider, method) {
   
    return function(recipeName, factoryFunction) {
   
      if (factoryFunctio
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值