AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]

Posted

技术标签:

【中文标题】AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]【英文标题】:AngularJS: Why people prefer factory to share data between controllers [duplicate]AngularJS:为什么人们更喜欢工厂在控制器之间共享数据[重复] 【发布时间】:2017-11-11 15:03:16 【问题描述】:

我是角度方面的新手。所以想知道如何在两个控制器之间共享数据并搜索谷歌。我访问了几页,发现大多数时候人们使用工厂来共享数据。我只是想知道我们不能通过服务而不是工厂来做吗?

第一个例子

<div ng-controller="FirstCtrl">
  <input type="text" ng-model="data.firstName">
  <br>Input is : <strong>data.firstName</strong>
</div>
<hr>
<div ng-controller="SecondCtrl">
  Input should also be here: data.firstName
</div>

myApp.factory('MyService', function()
  return 
    data: 
      firstName: '',
      lastName: ''
    ,
    update: function(first, last) 
      // Improve this method as needed
      this.data.firstName = first;
      this.data.lastName = last;
    
  ;
);

// Your controller can use the service's update method
myApp.controller('SecondCtrl', function($scope, MyService)
   $scope.data = MyService.data;

   $scope.updateData = function(first, last) 
     MyService.update(first, last);
   
);

第二个例子

var myApp = angular.module('myApp', []);

myApp.factory('Data', function()

    var service = 
        FirstName: '',
        setFirstName: function(name) 
            // this is the trick to sync the data
            // so no need for a $watch function
            // call this from anywhere when you need to update FirstName
            angular.copy(name, service.FirstName); 
        
    ;
    return service;
);


// Step 1 Controller
myApp.controller('FirstCtrl', function( $scope, Data )

);

// Step 2 Controller
myApp.controller('SecondCtrl', function( $scope, Data )
    $scope.FirstName = Data.FirstName;
);

示例取自此网址Share data between AngularJS controllers

请指导我。

【问题讨论】:

我建议你阅读这篇关于 Angular 服务与工厂的简单明了的文章。 blog.thoughtram.io/angular/2015/07/07/… 您的解释很好,但我是新手,所以仍然不明白为什么有人会写工厂来共享数据.....为什么不提供服务?如果可能的话,试着用更简单的方法向我解释。谢谢 【参考方案1】:

.service() 和 .factory() 都是单例,因为无论创建它的 API 是什么,您都只会获得每个 Service 的一个实例。

请记住,.service() 只是一个构造函数,它是用 new 调用的,而 .factory() 只是一个返回值的函数。

使用 .factory() 为我们提供了更多的功能和灵活性,而 .service() 本质上是 .factory() 调用的“最终结果”。 .service() 通过在函数上调用 new 为我们提供返回值,这可能会受到限制,而 .factory() 是在此编译过程之前的一步,因为我们可以选择要实现和返回的模式。

【讨论】:

你说:- 如何证明Both .service() and .factory() are both singletons?有什么方法可以通过编写和运行程序来证明吗? 您的解释很好,但我是新手,所以仍然不明白为什么有人会写工厂来共享数据.....为什么不提供服务?如果可能的话,试着用更简单的方法向我解释。谢谢 Factory 本质上是一个只有 $get 方法的提供者。 服务是单例的。适合跨应用程序/控制器通信。 你能给我任何代码示例,告诉我服务是单例的吗?

以上是关于AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:为啥在说“服务”时使用“工厂”?

为啥 Loki 库没有得到更广泛的使用?

Socket IO AngularJS(1.x) 工厂注入多次发射

为啥 FetchContent 更喜欢子目录包含而不是安装依赖项?

为啥 Visual Studio 2005 更喜欢“无”而不是 perforce 作为源代码控制提供程序

为啥Android更喜欢静态类