`
xiaoluode
  • 浏览: 14843 次
  • 来自: 深圳
社区版块
存档分类
最新评论

factory, service与provider的区别

 
阅读更多

Angular为我们提供了三种创建服务的方式:

1、Factory

2、Service

3、Provider

一、当使用 factory 来创建服务的时候,相当于新创建了一个对象,然后在这个对象上新添属性,最后返回这个对象。当把这个服务注入控制器的时候,控制器就可以访问在那个对象上的属性了。

 

app.factory('MyFactory', function () {
        var _artist = '',
            service = {};

        service.getArtist = function () {
            return _artist;
        };

        return service;
    })
    .controller('myFactoryCtrl', [
        '$scope', 'MyFactory',
        function ( $scope, MyFactory ) {
            $scope.artist = MyFactory.getArtist();
        }]);

 二、当使用 service 创建服务的时候,相当于使用 new 关键词进行了实例化。因此,你只需要在 this 上添加属性和方法,然后,服务就会自动的返回 this 。当把这个服务注入控制器的时候,控制器就可以访问在那个对象上的属性了。

 

 

app.service('MyService', function () {
        var _artist = '';
    
        this.getArtist = function () {
            return _artist;
        };
    })
    .controller('myServiceCtrl', [
        '$scope', 'MyService',
        function ( $scope, MyService ) {
            $scope.artist = MyService.getArtist();
        }]);

 三、 provider 是唯一一种可以创建用来注入到 config() 函数的服务的方式。想在你的服务启动之前,进行一些模块化的配置的话,就使用 provider 。

 

app.provider('MyProvider', function () {

        // 只有直接添加在this上的属性才能被config函数访问
        this._artist = '';
        this.thingFromConfig = '';

        // 只有$get函数返回的属性才能被控制器访问
        this.$get = function () {
            var that = this;

            return {
                getArtist: function () {
                    return that._artist;
                },
                thingFromConfig: that.thingFromConfig
            };
        };
    })
    .config(['MyProvider', function ( MyProvider ) {
        MyProvider.thingFormConfig = 'this is set in config()';
    }])
    .controller('myProviderCtrl', [
        '$scope', 'MyProvider',
        function ( $scope, MyProvider ) {
            $scope.artist = MyProvider.getArtist();
        }]);

 

分享到:
评论

相关推荐

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

    与Factory相比,Service更强调面向对象的编程风格。以下是一个Service的例子: ```javascript app.service('myService', function() { this.data = null; this.fetchData = function() { // ...同上... }; });...

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

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

    File System Service Provider

    **文件系统服务提供者(File System Service Provider)** 在Java Standard Edition (Java SE) 平台中,Java Naming and Directory Interface (JNDI) 是一个关键的API,它为应用程序提供了统一的方式来查找和管理命名...

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

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

    Laravel开发-laravel-service-provider .zip

    Service Provider通过`register`和`boot`两个方法与应用进行交互。 1. **注册(Register)**:在`register`方法中,我们主要进行服务绑定。这是将类与接口关联,或者直接注册类实例到服务容器的过程。例如,我们...

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

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

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

    Service与Factory类似,但它使用JavaScript的`new`关键字来实例化一个构造函数。这意味着Service的实例会具有`this`上下文,而Factory则不会。Service同样返回一个对象,但它的创建方式更像传统的面向对象编程。...

    Laravel开发-laravel-service-provider

    在Laravel框架中,服务提供者(Service Provider)是整个依赖注入容器的核心,它是框架与应用之间进行交互的桥梁。本篇文章将深入探讨Laravel服务提供者的概念、作用以及如何编写和注册服务提供者。 一、服务提供者...

    angularJS——三种自定义service方法

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

    AngularJS服务service用法总结

    m1.controller('firstController', ['$scope', 'providerService01', 'factoryService01', function($scope, providerService01, factoryService01) { // 使用providerService01服务 console.log(providerService...

    Laravel开发-provider-laravel

    在Laravel框架中,服务提供者(Service Provider)和门面(Facade)是核心的依赖注入和服务定位机制。这两个概念对于理解Laravel框架的工作原理至关重要。本文将深入探讨服务提供者和门面的实现与应用,以帮助开发者...

    nacos-provider.zip

    在我们的示例项目“nacos-provider”中,我们可以看到只有一个模块,这意味着这个项目可能是一个Nacos服务提供者。通过以上步骤,我们可以将UI-dGenerator集成到这个项目中,为服务间的通信提供全局唯一的请求ID,...

    使用Angular.js开发的注意事项

    - factory:与service类似,factory也是用于创建服务的容器,它可以返回任意类型的数据,包括函数、对象等。与service不同的是,factory在创建时更像是一个普通函数,更适合返回简单的值或者函数,用于实现一些轻量...

    kafka事务+DB事务企业级应用是怎么处理这俩个事物SpringBoot管理事务管理的报错信息

    demo.service.AbstractNewsConsumer :资讯消费异常: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.TransactionManager' ...

    Jboss-ESB学习笔记.doc

    <jms-provider connection-factory="ConnectionFactory" name="JBossMessaging"> ... </jms-provider> ``` 4. **配置 Service**:Service 是 ESB 的核心部分,它定义了如何处理接收到的消息。在本例中,Service ...

    JBOSS_ESB_开发手册

    - **Service**:定义了ESB提供的服务,通常与Provider关联,实现对外部请求的具体响应。 - **Listener**:监听特定类型的消息或事件,一旦接收到匹配的输入,即触发相应的处理流程。 - **JMS-Listener**:专门...

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

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

Global site tag (gtag.js) - Google Analytics