博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次性搞明白 service和factory区别
阅读量:5294 次
发布时间:2019-06-14

本文共 1227 字,大约阅读时间需要 4 分钟。

原文链接

    

  等下,已经有一篇文章回答了'Service和Factory的区别’,那我该起个什么样的标题呢?

  这个网上已经有很多人讨论过,我这篇就看起来就多余了。然而我们还是经常看到这个
  即使你看了很多StackOverflow上的回答
,还是一头雾水。而且那些例子都有些老了,不适合一些新的平台,比如ES6!
 
  这里总结下service和factory的区别,以及为什么我们
最好使用service。
 
  好了,那到底这两个在angularjs里有啥区别?我们都知道,可以这样定义Service:
app.service('MyService', function () {  this.sayHello = function () {    console.log('hello');  };});

  .service()方法用来在我们模块里定义一个service服务,它接收一个字符串名字和一个方法作为参数。也就是说,当我们定义好一个service,就可以在我们的其他组件里注入和使用,比如controllers,directives和filters:

app.controller('AppController', function (MyService) {  MyService.sayHello(); // logs 'hello'});

  好,现在看下,用Factory进行同样的实现

app.factory('MyService', function () {  return {    sayHello: function () {      console.log('hello');    }  }});
View Code

  .factory()方法一样,接收一个字符串名字和一个方法两个参数,来定义一个factory, 和service一样,在其他地方注入使用。那么区别在哪?

  可能你已经发现了,service在使用this指针,而factory直接返回了一个对象。为什么?因为Service是一个构造函数,但Factory不是。在Angular的底层,当这段代码在Service构造函数初始化的时候,会去调用object.create()。而Factory就一个普通被调用的方法,所以它要显式地返回一个对象。

  为了弄明白,我们来看下factory在angular里的源码:

function factory(name, factoryFn, enforce) {  return provider(name, {    $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn  });}

  

转载于:https://www.cnblogs.com/johnzhu/p/5884708.html

你可能感兴趣的文章
推荐几个很实用的编程网站
查看>>
PHP去掉html中的空行、空白函数
查看>>
Docker Harbor
查看>>
FreeMarker(四)类型
查看>>
poj 1961 KMP的应用
查看>>
CISP/CISA 每日一题 14
查看>>
Codeforces 233
查看>>
Django中的模板渲染是什么
查看>>
《白帽子讲web安全》学习笔记 (2)
查看>>
Spring 集成Hibernate的三种方式
查看>>
《iOS应用逆向工程:分析与实战》
查看>>
ligerui+json_001_实现表格(grid)的后台数据显示、分页
查看>>
分分钟学会Python3
查看>>
SQL IN查询优化
查看>>
jqguid
查看>>
FM(带RDS)模块。 内部芯片SILICON LABS SI4705芯片 到货了
查看>>
wordpress使用技巧
查看>>
HDU(2897)邂逅明下
查看>>
android压缩图片,解决oom错误
查看>>
在Hadoop1.2.1上运行第一个Hadoop程序FileSystemCat
查看>>