AngularJS服务总结
2016-03-29 17:38
621 查看
在之前介绍AngularJS的博客中,简单的介绍了AngularJS提供的常用服务,以及如何自定义服务,具体可参见《AngularJS 服务(Service)》。在这一篇博客中,我将为大家详细介绍如何自定义服务,以及各种方式之间的区别。
在这段代码中,我们是用
细心的小伙伴应该可以发现
在这段代码中,我们使用了
value(name, object)
value(name, object)方法允许我们直接将一个普通值或对象作为服务。我们通过一段代码来看看如何使用:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>AngularJS</title> <script type="text/javascript" src="js/angular.min.js"></script> <script type="text/javascript"> angular.module("myApp", []) .value("HQValue", 10) .controller("myCtrl", function($scope, HQValue) { $scope.value = HQValue; }); </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> {{value}} </body> </html>
在这段代码中,我们是用
value方法定义了一个服务,服务名称为
HQValue,值为:10,这是一个很简单的例子。
constant(name, value)
constant(name, value)也可以注册一个服务,值可以是一个字符串、数字、数组、对象或函数,和
value(name, object)很像有木有。对上面的示例进行简单的修改:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>AngularJS</title> <script type="text/javascript" src="js/angular.min.js"></script> <script type="text/javascript"> angular.module("myApp", []) .constant("HQConstant", 10) .config(function(HQConstant) { console.info(HQConstant); }) .controller("myCtrl", function($scope, HQConstant) { $scope.value = HQConstant; }); </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> {{value}} </body> </html>
细心的小伙伴应该可以发现
constant(name, value)和
value(name, object)的用法虽然很想,但是二者也是有区别的,不然也就没必要搞两个出来了,二者最大的区别在于使用
constant(name, value)注册的服务可以在
config(configFn)方法中注入,而
value(name, object)不可以。通常用
value(name, object)来注册服务对象或者函数,而用
constant(name, value)来配置数据。
service(name, constructor)
使用service(name, constructor)注册服务,服务对象是使用
new进行实例化的,所以我们应该给
this添加属性。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="js/angular.min.js"></script> <script type="text/javascript"> angular.module("myApp", []) .service('HQString', function() { this.toUpperCase = function(x) { return x.toUpperCase(); } }).controller("myCtrl", function($scope, HQString) { $scope.name = HQString.toUpperCase('jianggujin'); }); </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div>{{name}}</div> </body> </html>
在这段代码中,我们使用了
service(name, constructor)注册了一个服务,服务名为
HQString,我们为该服务添加了一个
toUpperCase用于将字符串转换为大写。
factory(name, providerFunction)
使用factory(name, providerFunction)注册服务其实就是创建一个对象作为
providerFunction的返回值,注入到
controller中的其实就是创建的对象。我们使用
factory(name, providerFunction)来实现
service(name, constructor)同样的功能,代码如下:
<head> <meta charset="UTF-8"> <title></title> <script src="js/angular.min.js"></script> <script type="text/javascript"> angular.module("myApp", []) .factory('HQString', function() { return { toUpperCase: function(x) { return x.toUpperCase(); } }; }).controller("myCtrl", function($scope, HQString) { $scope.name = HQString.toUpperCase('jianggujin'); }); </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div>{{name}}</div> </body>
provider(name, provider)
provider(name, provider)是可以传入
config(configFn)的服务,如果我们想要在 service对象启用之前,先进行模块范围的配置,那就应该用 provider。使用
provider(name, provider)注册服务,我们需要为
this添加
$get函数,函数返回用于注入到
controller中对象,我们也可以为
this添加其他属性以便于我们在
config(configFn)方法中使用。需要注意的是,如果我们的服务名称为:
HQString,那么我们在
config(configFn)方法中注入的名称应该为:
HQStringProvider。下面我们通过代码来看一下如何使用:
<head> <meta charset="UTF-8"> <title></title> <script src="js/angular.min.js"></script> <script type="text/javascript"> angular.module("myApp", []) .provider('HQString', function() { this.defaults = "defaults"; this.$get = function() { return { toUpperCase: function(x) { return x.toUpperCase(); } }; } }).config(function(HQStringProvider) { console.info(HQStringProvider.defaults) }).controller("myCtrl", function($scope, HQString) { $scope.name = HQString.toUpperCase('jianggujin'); }); </script> </head> <body ng-app="myApp" ng-controller="myCtrl"> <div>{{name}}</div> </body>
相关文章推荐
- Android IPC进程间通讯机制
- android之定时器AlarmManager
- 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务
- axis备忘
- linux
- 安全帐户管理器初始化失败:目录服务无法启动,错误状态 0xc00002e1 lsass.exe
- 将批处理文件注册成服务在系统启动的时候自动调用
- 全球路由DNS服务器
- 用sc删除mysql服务技巧
- Windows XP Service Pack 3 RC1 v.3244 winxp补丁3 提供下载
- Run As Service runassrv.exe 详细参数第1/2页
- 安装MySQL在最后的start service停住了解决方法
- Powershell获取系统中所有可停止的服务
- 在同一台机器上运行多个 MySQL 服务
- android使用Messenger绑定Service的多种实现方法
- C语言实现在windows服务中新建进程的方法
- asp.net Web Service 接口大量数据传输解决方案
- AngularJS基础教程之简单介绍
- jQuery Ajax调用WCF服务详细教程
- 深入剖析哪些服务是Oracle 11g必须开启的