【问题标题】: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/…
  • 您的解释很好,但我是新手,所以仍然不明白为什么有人会写工厂来共享数据.....为什么不提供服务?如果可能的话,试着用更简单的方法向我解释。谢谢

标签: angularjs


【解决方案1】:

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

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

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

【讨论】:

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