为了账号安全,请及时绑定邮箱和手机立即绑定

服务与工厂的混淆

服务与工厂的混淆

一只斗牛犬 2019-07-03 10:58:57
服务与工厂的混淆据我所知,当我在工厂内返回一个被注入控制器的对象时。在服务内部处理对象时,我将使用this什么都不回。我以为服务是总是单身,而那个新工厂对象每个控制器都会被注射。然而,事实证明,工厂对象也是单例吗?演示示例代码:var factories = angular.module('app.factories', []);var app = angular.module('app',  ['ngResource', 'app.factories']); factories.factory('User', function () {   return {     first: 'John',     last: 'Doe'   };});app.controller('ACtrl', function($scope, User) {   $scope.user = User;});app.controller('BCtrl', function($scope, User) {   $scope.user = User;});变时user.first在……里面ACtrl结果证明user.first在……里面BCtrl也发生了变化。User是单身人士吗?我的假设是在一个工厂的控制器中注入了一个新的实例?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

对我来说,当我意识到他们的工作方式是一样的:通过运行一些东西时,启示就来了。一次,将他们得到的价值存储起来,然后咳嗽起来。相同的存储值当通过依赖注入引用时。

假设我们有:

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

三者的区别在于:

  1. a

    存储的值来自运行

    fn

    ,换言之:

    fn()

  2. b

    的存储值来自

    new

    fn

    ,换言之:

    new fn()

  3. c

    的存储值来自于

    new

    fn

    ,然后运行一个

    $get

    实例的方法

这意味着,在角内有类似于缓存对象的东西,每个注入的值只分配一次,当它们第一次被注入时,并且:

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

这就是为什么我们用this在服务中,并定义this.$get在提供者那里。

希望这能帮上忙。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 471 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信