angularjs---服务(service / factory / provider)
初angularJs时 常写一些不够优雅的代码 !我总结了一下看看各位有没有中枪的!-----( 这里只针对服务service及其相关! )
以下做法不太优雅
- 兄弟controller 之间的相同的业务逻辑的实现 靠 从父 controller 通过继承实现. ×
- 将大量的不必要的业务逻辑和持久化的数据 堆放在 $scope 和controller中. ×
- ......
其实我们应该把业务逻辑和持久化的数据尽量放在service中
从内存性能的角度来看,只有在需要controller的时候才去加载,一旦不需要就应该抛弃,每次刷新都应该清除controller
而service 是个单例对象,只有在使用的时候才会被创建,在其生命周期内都有效(浏览器关闭之前).而且可以注入到不同controller中
因此service 更适合存放持久化的数据和绝大部分的业务逻辑.
angular 中提供了三种创建服务的方式
- service
- factory
- provider
service --- 实质是使用'new'进行了实例化 然后就可以在controller中调用service中this的方法和数据
var app = angular.module('myApp', []);
app.controller('rainCtrl', ['$scope', 'firstService',function($scope,firstService) {
$scope.name = firstService.name;
}]);
app.service('firstService', function() {
this.name = 'rain_tdk';
})
但是一般人不会直接把数据暴露出来 一般应该是这个样子的
var app = angular.module('myApp', []);
app.controller('rainCtrl', ['$scope', 'firstService',function($scope,firstService) {
$scope.name = firstService.getName();
}]);
app.service('firstService', function() {
var name = 'rain_tdk';
this.getName = function(){
return this.name = name;
}
})
factory --- 返回的一定是一个引用类型
var app = angular.module('myApp', []);
app.controller('rainCtrl', ['$scope', 'secondService',function($scope,secondService) {
$scope.name = secondService.name;
}]);
app.factory('secondService', function(){
return {
name:"rain_tdk"
}
})
provider
provider是唯一一个可以传.config()函数的service. 如果想在service对象启动之前,先进行模块范围的配置,就应该选择provide....
注意:在config函数 里注入 provide时 有特殊的命名规则: provideName+Provider,控制器中要调用的在$get中返回
优点: 可以在可以在Provide 对象传递到应用程序的其他controller 之前在.config()函数中对其进行修改
var app = angular.module('myApp', []);
app.controller('rainCtrl', ['$scope', 'thirdService', function($scope, thirdService) {
$scope.name = thirdService.name;
}]);
app.config(function(thirdServiceProvider) {
thirdServiceProvider.name = 'rain_tdk2';
});
app.provider('thirdService', function() {
this.name = 'rain_tdk1';
this.$get = function() {
var _this = this;
return {
name: _this.name
}
}
})
现在看看源码

可以看出什么他们三个方法是一个德行的 哈哈哈哈...
小伞(rain_tdk) 技术有限...如果出现错误请大神指正.如有疑问也欢迎大家一起研讨...
angularjs---服务(service / factory / provider)的更多相关文章
- angular 服务 service factory provider constant value
angular服务 服务是对公共代码的抽象,由于依赖注入的要求,服务都是单例的,这样我们才能到处注入它们,而不用去管理它们的生命周期. angular的服务有以下几种类型: 常量(Constant): ...
- AngularJS 1.x系列:AngularJS服务-Service
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- AngularJS服务及注入--Provider
Provider简介 在AngularJS中,app中的大多数对象通过injector服务初始化和连接在一起. Injector创建两种类型的对象,service对象和特别对象. Service对象由 ...
- angularjs model.service vs provider vs factory?
<!DOCTYPE html> <html ng-app="app"> <head> <script src="http://c ...
- AngularJS 服务(Service)
AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 ...
- 41.AngularJS 服务(Service)
转自:https://www.cnblogs.com/best/tag/Angular/ 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. A ...
- angularjs服务-service
Service 的特性 ①service都是单例的 ②service由$injector 负责实例化 ③service在整个应用的声明周期中存在,可以用来共享数据 ④在需要使用的地方利用依赖注入ser ...
- AngularJS学习之旅—AngularJS 服务(八)
1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 Angular ...
随机推荐
- Struts2 语法--action
xml的注释: <!--叨叨叨叨--> web.xml注释格式": <?xml version="1.0" encoding="UTF-8&q ...
- SQL清除所有数据库日志脚本
--SQL清除所有数据库日志脚本 declare @CurrentDataBaseName nvarchar(100) declare @CurrentDataBaseID nvarchar(100) ...
- 用css怎么制作下拉列表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
信息如下: 不知道为撒出现这个问题,查资料也木有查到..看提示信息可能是UIKit的问题,所以就试着这样解决,结果居然好了....有谁知道原因的告诉额一声啊,拜托!
- Android在一个APP中通过包名或类名启动另一个APP
开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通 ...
- 'xcopy' 'ipconfig'。。。 不是内部或外部命令,也不是可运行的程序 或批处理文件
最近在win8下安装软件的时候,总是报 "xxx不是内部或外部命令,也不是可运行的程序 或批处理文件" 的错误 . 百思不得其解 打开cmd 或 powerShell 输入xco ...
- Python3基础 当函数中的局部变量与全局变量同名了,各管各的
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- Struts2--Result类型
4种 result类型: dispatcher, redirect, chain, redirectAction dispatcher, redirect只能跳转到jsp等页面 chain,redir ...
- ural1523 K-inversions
K-inversions Time limit: 1.0 secondMemory limit: 64 MB Consider a permutation a1, a2, …, an (all ai ...
- Xcode7 免证书真机测试
Xcode很早就有个免证书测试,今天我自己也测试了一把,还是挺好用的,接下来,我就说一下我的大体过程: 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题 ...