初angularJs时  常写一些不够优雅的代码  !我总结了一下看看各位有没有中枪的!-----( 这里只针对服务service及其相关! )

以下做法不太优雅

  1. 兄弟controller 之间的相同的业务逻辑的实现 靠  从父 controller 通过继承实现.   ×
  2. 将大量的不必要的业务逻辑和持久化的数据  堆放在 $scope  和controller中.    ×
  3. ......

其实我们应该把业务逻辑和持久化的数据尽量放在service中

  从内存性能的角度来看,只有在需要controller的时候才去加载,一旦不需要就应该抛弃,每次刷新都应该清除controller

  而service 是个单例对象,只有在使用的时候才会被创建,在其生命周期内都有效(浏览器关闭之前).而且可以注入到不同controller中

  因此service 更适合存放持久化的数据和绝大部分的业务逻辑.

angular 中提供了三种创建服务的方式

  1. service
  2. factory
  3. 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)的更多相关文章

  1. angular 服务 service factory provider constant value

    angular服务 服务是对公共代码的抽象,由于依赖注入的要求,服务都是单例的,这样我们才能到处注入它们,而不用去管理它们的生命周期. angular的服务有以下几种类型: 常量(Constant): ...

  2. AngularJS 1.x系列:AngularJS服务-Service

    1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...

  3. AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)

    1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...

  4. AngularJS服务及注入--Provider

    Provider简介 在AngularJS中,app中的大多数对象通过injector服务初始化和连接在一起. Injector创建两种类型的对象,service对象和特别对象. Service对象由 ...

  5. angularjs model.service vs provider vs factory?

    <!DOCTYPE html> <html ng-app="app"> <head> <script src="http://c ...

  6. AngularJS 服务(Service)

    AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 ...

  7. 41.AngularJS 服务(Service)

    转自:https://www.cnblogs.com/best/tag/Angular/ 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. A ...

  8. angularjs服务-service

    Service 的特性 ①service都是单例的 ②service由$injector 负责实例化 ③service在整个应用的声明周期中存在,可以用来共享数据 ④在需要使用的地方利用依赖注入ser ...

  9. AngularJS学习之旅—AngularJS 服务(八)

    1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 Angular ...

随机推荐

  1. DOM4j 操作XML

    <?xml version="1.0" encoding="GBK"?> <persons> <men> <perso ...

  2. Request 地址栏传值

    request页面 protected void btnSearch_Click(object sender, EventArgs e) { Response.Redirect("Reque ...

  3. [转] Linux下移动virtualbox虚拟硬盘丢失eth0

    1.遇到什么的问题(What)      在新的virtualbox虚拟机上挂上曾使用过的虚拟硬盘,在启动的时候,发现找不到网卡eth0, 在输入ifconfig –a的时候,也没有任何Ethnet的 ...

  4. DWR Annotations

    DWR   Annotations DWR 标注是用来代替 dwr.xml 或者与其一同工作的. 1.初始配置 <servlet> <description>DWR contr ...

  5. 原生 JS Ajax,GET和POST 请求实例代码

    javascript/js的ajax的GET请求代码如下所示: <script type="text/javascript"> /* 创建 XMLHttpRequest ...

  6. linux下的安装百度云网盘

    linux下的百度网盘 (2014-10-20 18:01:14) 标签: linux 百度网盘 网盘 百度 forlinux 分类: 技术博文 百度网盘说实话,其实我挺喜欢的,好处什么的,就不说了, ...

  7. Java运行内存结构分析

  8. 操作IFRAME及元素

    内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe id="mainiframe..& ...

  9. iframe与父页面的js通信

    1.父页面调用iframe中的函数: document.getElementById('myframe').contentWidow.fun1(); 2.在iframe中调用父页面中的函数: wind ...

  10. html5 WebSocket 与 PHP socket 聊天室原理

    html js <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...