`
凤凰山
  • 浏览: 147576 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

AngularJS Service vs Factory vs provider 区别

 
阅读更多

For me the revelation came when I realise that they all work the same way: by running somethingonce, storing the value they get, and then cough up that same stored value when referenced through Dependency Injection.

Say we have:

app.factory('a', fn);
app.service('b', fn);
app.provider('c', fn);

The difference between the three is that:

  1. a's stored value comes from running fn
  2. b’s stored value comes from newing fn
  3. c’s stored value comes from first getting an instance by newing fn, and then running a $getmethod of the instance

which means, there’s something like a cache object inside angular, whose value of each injection is only assigned once, when they've been injected the first time, and where:

cache.a = fn()
cache.b = new fn()
cache.c = (new fn()).$get()

This is why we use this in services, and define a this.$get in providers.

分享到:
评论

相关推荐

    AngularJS 之 Factory vs Service vs Provider - 技术翻译 - 开源中国社区1

    AngularJS提供了三种不同的方式来创建和注册服务:Factory、Service和Provider。理解它们之间的区别和使用场景是提升AngularJS开发技能的关键。 1. Factory Factory是最常用的服务创建方式。在Factory中,你可以...

    AngularJS中serivce,factory,provider的区别 - I have a dream - 开源中国社区2

    在AngularJS中,服务(Service)、工厂(Factory)和提供者(Provider)是三种不同的方式来创建可注入的对象,它们都是依赖注入系统的一部分,用于在应用程序的不同组件之间共享数据和服务。下面将详细介绍这三者的...

    angularJS Provider、factory、service详解及实例代码

    本文将详细讲解AngularJS中的Provider、Factory和服务,并通过实例代码进行对比,以便更好地理解它们的工作原理。 1. **Provider** Provider是最强大的服务创建方式,因为它允许我们在应用配置阶段进行配置。`$...

    AngularJS服务service用法总结

    AngularJS为开发者提供了三种创建服务的方式:使用内置的$provider、使用module中的service方法和使用module中的factory方法。下面将分别介绍这三种方式的用法。 使用$provider是最灵活的服务创建方式。它允许...

    angularJS——三种自定义service方法

    Factory和Service在大多数情况下差别不大,而Provider适用于需要在配置阶段配置的服务,例如配置API URL或设置全局配置。 为了在控制器中使用这些服务,我们需要注入它们: ```javascript angular.module('myApp')...

    详解Angular中的自定义服务Service、Provider以及Factory

    Angular中的自定义服务Service、Provider以及Factory详解 在Angular中的自定义服务中,有三种方式可以实现服务的复用性,即Service、Provider和Factory。这些方法可以提高Angular代码的复用性和可维护性。 Factory...

    AngularJS之自定义服务详解(factory、service、provider)

    本文将深入探讨三种创建自定义服务的方式:Factory、Service和Provider。 1. **Factory(工厂)** Factory是AngularJS中最常用的服务创建方式之一。它通过函数返回一个对象,该对象包含服务的属性和方法。在...

    angularJs demo 各种基本用法

    自定义服务可以通过`factory`、`service`、`provider`等方式创建。 **指令(Directive)**: 指令是AngularJS的一个创新特性,它们扩展了HTML,让DOM元素具备更丰富的行为。常见的内置指令有`ngRepeat`(用于迭代...

    解决angularjs service中依赖注入$scope报错的问题

    AngularJS允许开发者在服务(Service)、控制器(Controller)和工厂(Factory)中注入依赖,例如内置的服务、自定义的服务或组件。在某些情况下,开发者可能会尝试将$scope对象注入到服务中,这将导致依赖注入机制发生...

    AngularJS API常用方法示例

    `service`基于构造函数,`factory`返回一个对象,而`provider`在配置阶段提供配置,运行阶段返回服务。 以上仅是AngularJS API的一部分,实际开发中还有许多其他功能,如`directives`(自定义指令)、`filters`...

    angularjs前端框架

    - **服务创建**:使用`.service()`、`.factory()`或`.provider()`来定义服务。 - **服务注入**:在控制器或其它服务中通过构造函数参数注入服务。 ##### 3. 模板 AngularJS使用HTML作为模板语言,通过指令和表达式...

    AngularJS 高级程序设计编程学习代码

    通过`.service()`, `.factory()`, 或 `.provider()`方法可以创建自定义服务。 **6. 视图和路由** AngularJS的`ngView`指令结合`$routeProvider`服务,实现了视图的动态加载和路由管理。通过定义路由规则,我们可以...

    AngularJS的-查询列表

    AngularJS是一款由Google维护的JavaScript框架,用于构建交互式的单页应用程序(SPA)。它通过双向数据绑定、依赖注入和指令等特性,极大地简化了前端开发流程。本教程将深入探讨如何在AngularJS中创建和操作查询...

    angularjs高级程序设计 代码

    服务可以通过`factory`、`service`、`provider`等方式定义。 4. **指令(Directives)**:指令允许我们扩展HTML,创建自定义的DOM元素或属性。如`ngRepeat`用于数据遍历,`ngIf`控制元素的显示和隐藏。 5. **数据...

    AngularJS 学习资料

    ### AngularJS 学习资料详解 #### 一、AngularJS简介与重要性 AngularJS是一种广泛使用的开源前端JavaScript框架,由Google维护。它主要用于构建单页面应用(SPA),通过简化客户端和服务器之间的交互来提高用户...

    《angularJs深度剖析与最佳实践》源码

    源码中会有各种服务的实现,如`factory`、`service`、`provider`等不同创建方式的示例。 5. **模块**:AngularJS的模块(`angular.module`)用于组织应用,它们可以包含控制器、服务、指令等。源码将展示如何创建和...

    AngularJS 中文API参考手册.zip_API_angularjs_angularjs api

    我们可以通过`angular.service()`, `angular.factory()`, 或 `angular.provider()`来创建自定义服务。 **四、指令(Directives)** 指令是AngularJS中的一个重要特性,它们扩展了HTML,使其能够表达应用程序的行为...

    Angularjs 开发实例

    自定义服务可以通过`factory`、`service`、`provider`等方式创建。 4. **指令(Directives)**:指令扩展了HTML,让HTML能够执行特定的行为。例如,`ng-repeat`用于循环遍历数组并渲染多个元素,`ng-if`根据表达式...

Global site tag (gtag.js) - Google Analytics