サービスと工場の違いについて混乱しています。質問する

サービスと工場の違いについて混乱しています。質問する

私の理解では、ファクトリ内では、コントローラに注入されるオブジェクトを返します。サービス内では、オブジェクトを使用して処理しthis、何も返しません。

私は、サービスは常にシングルトンであり、新しいファクトリー オブジェクトがすべてのコントローラーに挿入されるものと想定していました。しかし、結局のところ、ファクトリー オブジェクトもシングルトンなのでしょうか?

説明するためのサンプルコード:

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', function($scope, User) {
  $scope.user = User;
});

user.firstを変更すると、 も変更されるACtrlことがわかります。たとえば、user.firstはシングルトンですか?BCtrlUser

私の想定では、新しいインスタンスがファクトリを使用してコントローラーに注入されたのでしょうか?

ベストアンサー1

すべての Angular サービスはシングルトンです

ドキュメント (シングルトンとしてのサービスを参照):https://docs.angularjs.org/guide/services

最後に、すべての Angular サービスはアプリケーション シングルトンであることを認識することが重要です。つまり、インジェクターごとに特定のサービスのインスタンスが 1 つだけ存在するということです。

基本的にサービスと工場の違いは次のとおりです。

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 ミートアップの 1 つで使用されました。http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html

おすすめ記事