AngularJS:为什么人们喜欢工厂在控制器之间共享数据

AngularJS:为什么人们喜欢工厂在控制器之间共享数据,angularjs,Angularjs,我是新来的。所以,我想知道如何在两个控制器和谷歌搜索引擎之间共享数据。我浏览了几页,发现大多数时候人们都使用工厂来共享数据。我只是想知道我们不能用服务代替工厂吗 第一个例子 示例取自此url 请告诉我。无论是什么API创建的服务,.service()和.factory()都是单例,因为每个服务只有一个实例 记住,.service()只是一个构造函数,它是用new调用的,而.factory()只是一个返回值的函数 使用.factory()为我们提供了更多的功能和灵活性,而.service()本质上

我是新来的。所以,我想知道如何在两个控制器和谷歌搜索引擎之间共享数据。我浏览了几页,发现大多数时候人们都使用工厂来共享数据。我只是想知道我们不能用服务代替工厂吗

第一个例子 示例取自此url

请告诉我。

无论是什么API创建的服务,.service()和.factory()都是单例,因为每个服务只有一个实例

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

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

同时调用.service()和.factory()这两个都是单例的,因为无论是哪个API创建的,每个服务都只能得到一个实例

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


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

我建议您阅读这篇关于Angular services vs factory的简单而清晰的文章。你的解释很好,但我是新来的,所以仍然不明白为什么有人会写工厂来共享数据……为什么不写服务?如果可能的话,试着用更简单的方式向我解释。谢谢,我建议您阅读这篇关于Angular services vs Factorys的简单明了的文章。你的解释很好,但我是新来的,所以仍然不明白为什么有人会写工厂来共享数据……为什么不写服务?如果可能的话,试着用更简单的方式向我解释。谢谢你说:“
如何证明.service()和.factory()都是单例”
?有没有办法仅仅通过编写和运行一个程序来证明这一点?你的解释很好,但因此我还是新手,所以仍然不明白为什么会有人编写工厂来共享数据……为什么不提供服务?如果可能的话,试着用更简单的方式向我解释。thanksFactory本质上是一个只有$get方法的提供者。服务是单例的。适用于跨应用程序/控制器的通信。你能给我一些代码示例来告诉我服务是单例的吗?你说:-如何证明
两者都是单例的。service()和.factory()都是单例的
?有没有办法仅仅通过编写和运行一个程序来证明这一点?你的解释很好,但因此我还是新手,所以仍然不明白为什么会有人编写工厂来共享数据……为什么不提供服务?如果可能的话,试着用更简单的方式向我解释。thanksFactory本质上是一个只有$get方法的提供者。服务是单例的。适用于跨应用程序/控制器的通信。您能给我一些代码示例,告诉我服务是单例的吗。
<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;
});