angularjs – 如何使用不与使用它的控制器共享其值的服务对象

前端之家收集整理的这篇文章主要介绍了angularjs – 如何使用不与使用它的控制器共享其值的服务对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们假设我创建了一个工厂,服务或提供者对象

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 ……

如何编写工厂,服务或提供程序,以便每个控制器获取服务对象的不同副本?

解决方法

由于工厂是单身,您需要在工厂中使用一种方法来创建您的服务.更改您的服务以使用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>

@L_403_0@

猜你在找的Angularjs相关文章