本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行演示 Factory,Service,Provider 之间的区别

1. Factory

factory('dataService',function(){
return {
golbal_sitename:"this is the shared value",
sayHello:function(msg){
alert(msg);
}
}
})

注意看上面的代码,我们定义dataService 里面 ,后面的funciton 直接返回的是一个对象。 反回对象里面可以定义属性和方法,上面就是返回了一个golbal_sitename属性和sayHello方法。

简单点说就是: 在factory 定义的function 返回的对象上面定义些属性和方法, 等注入到controller后,就可以在controller调用这些属性和方法了。

2. 我们来用service改写上面的代码

service('dataService',function(){
this.golbal_sitename = "this is the shared value";
this.sayHello = function(msg){
alert(msg);
};
});

注意上面的代码和factory 定义的区别,这里我们去掉了return 添加了this关键字。换句话说 factory 定义里面的function 其实是返回个对象,而service 定义里面的funciton 返回的是个类定义。

也就是说service 里面定义的dataService 最后是通过new 后面定义的function 来实例化的。

http://jsfiddle.net/kn46u0uj/3/

3. 使用Provider再次改写代码

Provider 定义的 service 可以传进 .config() 函数。当我们需要在service 启用前配置其模块参数时,就需要使用Provider来定义service.

代码如下:

provider('dataService',function(){
this.$get = function(){
return {
golbal_sitename:"this is the shared value",
sayHello:function(msg){
alert(msg);
}
}
};
})

http://jsfiddle.net/kn46u0uj/5/

上面使用三种方式定义的service 都可以正常工作, 唯一需要注意的就是使用当service 需要传入到config中进行配置的时候,一定要使用provider进行定义。

angularjs 中 Factory,Service,Provider 之间的区别的更多相关文章

  1. angularjs中factory, service和provider

    在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除.而controllers在不需要的时候就会被销毁了(因为service的底 ...

  2. angularjs factory,service,provider 自定义服务的不同

    angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angul ...

  3. AngularJS 讲解五, Factory ,Service , Provider

    一. 首先说一下,为什么要引入Factory,Service和Provider这三个Service层. 1.因为我们不应该在controller层写入大量的业务逻辑和持久化数据,controller层 ...

  4. JavaScript中this和$(this)之间的区别以及extend的使用

    jQuery中this和$(this)之间的区别: this返回的是当前对象的html对象,而$(this)返回的是当前对象的jQuery对象 举个正确的Demo实例: $("#textbo ...

  5. [转] C#中out和ref之间的区别

    gskcc 的原文地址 C#中out和ref之间的区别 首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个 ...

  6. [译]AngularJS中几种Providers(Factory, Service, Provider)的区别

    原文: http://blog.xebia.com/2013/09/01/differences-between-providers-in-angularjs/ 什么是Provider? Angula ...

  7. angularJS中directive与controller之间的通信

    当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...

  8. AngularJS中使用service,并同步数据

    service是单例对象,在应用中不同代码块之间共享数据. 对一些公用的方法封装到service中,然后通过依赖注入在Controller中调用,示例代码: 1.创建一个模块: var module ...

  9. iOS 中 #import同@class之间的区别

    很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢? 这是 ...

随机推荐

  1. 5. zabbix服务端添加fping

    zabbix服务端添加fping 原文链接:http://blog.chinaunix.net/uid-23500957-id-4366928.html fping-3.15.tar.gz 包的路径D ...

  2. loj2009. 「SCOI2015」小凸玩密室

    「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个 ...

  3. 升级到Xcode 5.1和iOS 7遇到的各种问题及解决办法汇总:

    <iOS 企业证书部署无效的问题>:http://t.cn/8s7ILWZ <clipsToBounds 属性默认值变了>:http://weibo.com/165881473 ...

  4. ajax图片上传,单个按钮实现选择图片和上传

    //图片原件上传功能 function gosubmit(file, key) { var formData = new FormData($("#inputForm")[0]); ...

  5. HTML-参考手册: 按字母顺序排列

    ylbtech-HTML-参考手册: 按字母顺序排列 1.返回顶部 1. 按字母顺序排列 New : HTML5新标签 标签 描述 <!--...--> 定义注释 <!DOCTYPE ...

  6. CentOS系统更换软件安装源yum

    第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  7. JSP 虚拟路径设置

    编辑server.xml 在Host标签内加  :path为虚拟路径  docBase为绝对路径 <Context path="/icon"  docBase="C ...

  8. 2.Prometheus安装部署

    环境准备 2台Linux操作系统(基于centos7) docker环境 配置 IP 角色 版本 192.168.229.139 prometheus-server 2.10 192.168.229. ...

  9. Javascript中的相等比较

    在比较相等或不相等之前,会对操作数进行类型转换,然后比较相等性 在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 1.如果由一个操作数是布尔值,则在比较相等性之前先将其转换为数值:2.如果 ...

  10. 关于pandas

    axis轴,axis=0为逐行,axis=1为逐列