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

AngularJS: Why people prefer factory to share data between controllers

本问题已经有最佳答案,请猛点这里访问。

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

第一例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  <input type="text" ng-model="data.firstName">
  Input is : {{data.firstName}}



  Input should also be here: {{data.firstName}}


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);
   }
});

第二例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
});

示例取自此URL,在AngularJS控制器之间共享数据。

请引导我。


.service()和.factory()都是单例的,因为无论哪个API创建了每个服务,您都只能获得一个实例。

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

使用.factory()给了我们更多的能力和灵活性,而.service()本质上是.factory()调用的"最终结果"。.service()通过对函数调用new来给我们返回值,而.factory()是这个编译过程之前的一步,因为我们要选择要实现和返回的模式。