• 一次性搞明白 service和factory区别


    原文链接

    http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html

        

      等下,已经有一篇文章回答了'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
      });
    }

      

  • 相关阅读:
    angularjs $index用来取顺序
    angularjs &登录跳转
    if(!confirm("您确定删除吗?")){return;}
    登录跳转
    undefined null测试
    git生成密钥
    遍历map
    网络相关名词解释
    redis的Pub/Sub
    SQLAlchemy的使用
  • 原文地址:https://www.cnblogs.com/johnzhu/p/5884708.html
Copyright © 2020-2023  润新知