angularJs-自定义服务(service,factory,provide)和使用

AngularJs的内置服务有很多,例如 scope, http等,那么如何自定义一个服务呢?
AngularJs提供了三种方法可以自定义服务,分别是provider、factory、service.
那么他们都是怎么定义?怎么调用?有什么区别和联系?我们一起来看看.

一.service

1.有返回值写法

angular.module('myTestApp')
    .service('TestService', function () {
        var TestService = {};
        TestService.getTestString = function () {
            return "success";
        }
        return TestService;
    })

2.无返回值写法,需要加this参数

angular.module('myTestApp')
    .service('TestService', function () {
        this.getTestString = function () {
            return "success";
        }
    });

3.调用(需要注入TestService)

angular.module('myTestApp')
    .controller('state1Ct', function ($scope,TestService) {
        $scope.testStr = TestService.getTestString();
    });

二.factory

通过factory方法创建的服务必须有返回值,即必须有return函数,它可以返回任意类型的值,包括基本数据类型或者对象类型。
如果没有return函数,则会报错。

factory注入的结果就是return返回的结果,可以在被注入的对象中使用注入的结果定义的各种方法.

angular.module('myTestApp')
    .factory('UtilFactoryService', function () {
        var factory = {};
        factory.getTestString = function () {
            return "factory success";
        };
        return factory; //这里返回的是factory 包含2个方法
    })

;

使用方法和service相同

三.provider

通过provider方法创建的服务一定要包含 getprovider get方法返回的结果,如果不包含$get方法,则程序会报错。

在三种创建服务的方法中,只有使用provider方法创建的服务才可以传进config函数,以用于在对象启用之前,对模块进行配置。但是在config中进行配置的只能是在$get函数之外定义的变量,在下面定义的provider中只有artist与thingFromConfig两个变量可以被访问到,而getArtist与getThingFromConfig两个方法是不能被在config函数中访问到的。

而且在注入config函数中时,参数名必须由服务名+Provider组成,例如下面的例子注入到config函数中的就是myProviderProvider

app.controller('myCtrl', ['$scope', 'myProvider', function ($scope, myProvider) {
     console.log(myProvider.getThingFromConfig());  //kingx name
 }]);

 app.provider('myProvider', function () {
     this.artist = '';
     this.thingFromConfig = '';

     this.$get = function () {
         var that = this;
         return {
             getArtist: function () {
                 return that.artist;
             },
             getThingFromConfig: function () {
                 return that.thingFromConfig;
             }
         }
     };
 });

 app.config(function (myProviderProvider) { //注意这里参数的名字
     myProviderProvider.thingFromConfig = 'kingx name';
 });

三种方法的比较

需要在config中进行全局配置的话,只能选择provider方法
factory和service是使用比较频繁的创建服务的方法。他们之间的唯一区别是:service方法用于注入的结果通常是new出来的对象,factory方法注入的结果通常是一系列的functions
provider是创建服务最为复杂的方法,除非你需要创建一个可以复用的代码段并且需要进行全局配置,才需要使用provider创建
所有具有特定性目的的对象都是通过factory方法去创建

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值