AngularJS Service vs Factory vs provider 区别

For me the revelation came when I realise that they all work the same way: by running somethingonce, storing the value they get, and then cough up that same stored value when referenced through Dependency Injection.

Say we have:

app.factory('a', fn);
app.service('b', fn);
app.provider('c', fn);

The difference between the three is that:

  1. a's stored value comes from running fn
  2. b’s stored value comes from newing fn
  3. c’s stored value comes from first getting an instance by newing fn, and then running a $getmethod of the instance

which means, there’s something like a cache object inside angular, whose value of each injection is only assigned once, when they've been injected the first time, and where:

cache.a = fn()
cache.b = new fn()
cache.c = (new fn()).$get()

This is why we use this in services, and define a this.$get in providers.

猜你喜欢

转载自guosxu.iteye.com/blog/2293263
VS