5

ファクトリ、サービス、またはプロバイダ オブジェクトを次のように作成するとします。

myApp.factory('myService', function() {
  return {
    counter: 0,
    increment: function() {
      console.log('counter: ' + (this.counter++))
    }
  };
});

そして、それに依存するコントローラーがあるとします

myApp.controller('myCtrl', function(myService) {
  $scope.incr = function() {
    myService.increment();
  };
}

そして、このコントローラーをhtmlのさまざまな部分に適用します

<div ng-controller="myCtrl">
  <button ng-click="increment()">increment</button>
</div>
...
<div ng-controller="myCtrl">
  <button ng-click="increment()">increment</button>
</div>

現在、各ボタンをクリックすると、カウンターはユニバーサルで、0、1、2、3、...

各コントローラーがサービス オブジェクトの異なるコピーを取得するように、ファクトリ、サービス、またはプロバイダーを作成するにはどうすればよいですか?

4

2 に答える 2

5

ファクトリはシングルトンであるため、ファクトリ内のメソッドを使用して毎回サービスを作成する必要があります。サービスを変更して、インクリメントを行うサービスを返す create メソッドを作成します。

myApp.factory('myService', function() {
  return {
    create: function () {
      return { 
        counter: 0,
        increment: function() {
          console.log('counter: ' + (this.counter++));
        }
      };
    }
  };
});

myApp.controller('myCtrl', function($scope, myService) {
  var service = myService.create();
  $scope.incr = function() {
    service.increment();
  };
});

また、コントローラーのメソッド名は、ビューにあるものと一致しません:

<div ng-controller="myCtrl">
  <button ng-click="incr()">increment</button>
</div>
...
<div ng-controller="myCtrl">
  <button ng-click="incr()">increment</button>
</div>

プランカー

于 2015-06-20T00:10:01.220 に答える