Angularjs笔记之 - factory,service,provider的区别

本文探讨AngularJS中的Factory、Service和Provider的区别。Factory是最常用的,它返回一个对象,常用于AJAX请求。Service创建的是单例,其构造函数相当于JS的constructor。而Provider则允许在应用配置阶段进行服务的配置,分为私有部分和可在app.config中配置的部分,最后提供在控制器中使用的服务。
摘要由CSDN通过智能技术生成

Factory 使用频率:最高

作用就是返回一个有属性有方法的对象
举例用于AJAX请求:

angular.
  module('core.phone').
  factory('Phone', ['$resource',
    function($resource) {
      return $resource('phones/:phoneId.json', {}, {
        query: {
          method: 'GET',
          params: {phoneId: 'phones'},
          isArray: true
        }
      });
    }
  ]);

在组件中使用:
第一步:写入依赖:

//路径:phone-detail/phone-detail.module.js
angular.module('phoneDetail',['core.phone'/*这就是依赖的factory出处*/])

第二步:使用factory

//路径:phone-detail/phone-detail.component.js
angular.
	module('phone-detail').
	component('phoneDetail',{
		templateUrl:'phone-detail/phone-detail.template.html',
		controller(['Phone',function phoneDetailCtrl(Phone){
			this.phones = Phone.query();
			this.orderprop = 'age'
		}])
	}

Service 使用频率:较少

通过 service 所注册的服务,在 controller 取得实体时,拿到的实体就是该传进去的 function。DI engine 通过所提供的 function ,new 出该 function 的实体,该 function 相当于是 JS constructor 的功能。DI engine 的服务都是 singleton,也就是 AngularJS 只有在 App 一开始时会初始化向 DI 注册的 service,之后调用服务的动作,都只是「取得」服务,不会再有 new 的动作。

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

app.service('helloWorldService', function(){
    this.hello = function() {
        return "Hello World";
    };
});

app.factory('helloWorldFactory', function(){
    return {
        hello: function() {
            return "Hello World";
        }
    }
});

Provider 使用频率:中等

Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider

第一部分:是私有变量和私有函数(例如:var name=“test”)。

第二部分:是在app.config函数里可以访问的变量和函数(设置在this上),app.config()函数能够修改this上的变量和函数。

第三部分:是在控制器里可以访问的变量和函数(设置在this.$get上)。

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();
        }]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值