AngularJs自定义服务(二)

本文深入解析AngularJS中的服务概念,包括value、constant、factory、provider和服务(service)等五种服务类型的特点与应用场景,并通过示例代码说明它们之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AngularJs中框架的所有服务都是单例对象。

  • value
    经常被用在一个指令上面,用来保存值但不能对值进行计算,可以用angular.extend(valuename,{值名: 值})来改变value服务。value服务分为两部分:
    name(字符串)
    注册的服务名。
    value(值)
    将这个值将作为可以注入的实例返回。
var app=angular.module('App',[]);
//返回一个值
app.value("name","crystal");
//返回一个函数
app.value("name",function(){  
    alert("返回函数");
})
  • constant
    用来在指令中提供默认配置,但放入其中的值不会改变,因此基本上是一个基本类型的值或者是一个对象。其定义方法与value类似。
var app=angular.module('App',[]);
app.constant("name","crystal");

constant与value最主要的区别:常量可以注入到配置函数中,而值不行。
也就是constant定义的常量可以在config()中配置,而value定义的则无法访问。通常情况下,用value来注册服务对象或函数,constant来配置数据。

angular.module('myApp', [])
.constant('apiKey', '123123123')
.config(function(apiKey) {
// 在这里apiKey将被赋值为123123123
// 就像上面设置的那样
})
.value('FBid','231231231')
.config(function(FBid) {
// 这将抛出一个错误,未知的provider: FBid
// 因为在config函数内部无法访问这个值
});
  • factory
    factory为自定义工厂,是注册服务的最常规方式,它可返回任何对象,包括基本的数据类型。

    name(字符串)
    注册的服务名。
    getFn
    这个函数会在AngularJS创建服务实例时被调用。

angular.module('myApp')
.factory('githubService', ['$http', function($http) {
    return {
        getUserEvents: function(username) {
            // ...
        }
    };
}]);
  • provider
    所有创建服务的方法都构建在provider方法之上。provider()方法负责在$providerCache中注册服务。
    从技术上说,当我们假定传入的函数就是$get()时,factory()函数就是用provider()方法注册服务的简略形式。

    如果需要AngularJs中的config()函数来对服务进行额外的扩展配置时,必须使用provider服务,它可在config()中配置特殊的值。

angular.module('myApp', [])
.config(function(githubServiceProvider) {
    githubServiceProvider.setGithubUrl("git@github.com");
});
  • service
    service服务返回的必须是对象,不能为基本数据类型。接受一个构造器,会自动运行new()来实例化一个对象,如果其他地方也有使用,则返回的为同一个对象。
var Person = function($http) {
    this.getName = function() {
        return $http({ method: 'GET', url: '/api/user'});
    };
};
angular.service('personService', Person);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值