angularjs - 如何创建一个不与使用它的 Controller 共享其值的服务对象

标签 angularjs angularjs-service angularjs-factory angularjs-provider

假设我像这样创建了一个工厂、服务或提供者对象

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

假设我有一个依赖它的 Controller
myApp.controller('myCtrl', function(myService) {
  $scope.incr = function() {
    myService.increment();
  };
}

我在 html 的不同部分应用了这个 Controller
<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……

我如何编写我的工厂、服务或提供者,以便每个 Controller 获得服务对象的不同副本?

最佳答案

由于工厂是单例,因此您每次都需要在工厂中使用一种方法来创建您的服务。将您的服务更改为具有返回执行递增服务的 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();
  };
});

此外, Controller 方法名称与 View 中的名称不匹配:
<div ng-controller="myCtrl">
  <button ng-click="incr()">increment</button>
</div>
...
<div ng-controller="myCtrl">
  <button ng-click="incr()">increment</button>
</div>

Plunkr

关于angularjs - 如何创建一个不与使用它的 Controller 共享其值的服务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948820/

相关文章:

javascript - AngularJS : cannot connect factory to controller

Angularjs - 工厂/服务内的 Restangular 调用

javascript - AngularJS 更新 CRUD 表时避免重复(正常添加到表有效)

javascript - 我如何在 AngularJS 上从 Controller 调用服务上的函数

javascript - 如何使用 AngularJS 设置 HTTP 调用和图像加载的基本 URL

angularjs - angular.service 定义 : service or factory

AngularJS - 自引用服务?

javascript - 如何从配置对象外部调用 Highcharts 工具提示格式化程序函数?

javascript - 注册 angularjs Controller 不返回任何内容

javascript - 如何将 JWT 保存到 localStorage