根据我的理解,当我在工厂里,我返回一个对象注入到控制器。当一个服务内,我使用这个对象处理对象,不返回任何东西。
我假设一个服务总是一个单例,一个新的工厂对象被注入每个控制器。然而,事实证明,一个工厂对象也是一个单例?
演示示例代码:
- var factories = angular.module('app.factories',[]);
- var app = angular.module('app',['ngResource','app.factories']);
- factories.factory('User',function () {
- return {
- first: 'John',last: 'Doe'
- };
- });
- app.controller('ACtrl',function($scope,User) {
- $scope.user = User;
- });
- app.controller('BCtrl',User) {
- $scope.user = User;
- });
当更改user.first在ACtrl,结果是user.first在BCtrl也改变,例如。用户是单身人士?
我的假设是一个新的实例注入一个控制器与工厂?
所有角服务都是单例:
文档(请参阅服务为单身):https://docs.angularjs.org/guide/services
Lastly,it is important to realize that all Angular services are application singletons. This means that there is only one instance of a given service per injector.
基本上服务和工厂之间的区别如下:
- app.service('myService',function() {
- // service is just a constructor function
- // that will be called with 'new'
- this.sayHello = function(name) {
- return "Hi " + name + "!";
- };
- });
- app.factory('myFactory',function() {
- // factory returns an object
- // you can run some code before
- return {
- sayHello : function(name) {
- return "Hi " + name + "!";
- }
- }
- });
查看关于$ provide:http://slides.wesalvaro.com/20121113/#/的演示文稿
这些幻灯片被用在一个AngularJs联谊会:http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html