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:为啥人们更喜欢工厂在控制器之间共享数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Socket IO AngularJS(1.x) 工厂注入多次发射
为啥 FetchContent 更喜欢子目录包含而不是安装依赖项?