Angular JS:从控制器增加服务中的计数器

时间:2015-10-29 01:08:17

标签: javascript angularjs angularjs-scope

我试图从我的服务中的API中获取一个计数器的值,然后在我的控制器内的该计数器上递增:

服务

angular.module('app')
.factory('MyService', MyService)

function MyService($http) {
  var url = 'URL;

  return {
    fetchTotal: function(p) {
      return $http.get(url, { params: p })
        .then(function(response) {   
          var total = response.data.meta.total;
          return total;
        }, function(error) {
          console.log("error occured");
        })
    },
    incrementCounter: function(){
      total++;
    }
  }
}

控制器

app.controller('Controller1', function ($scope, MyService) {
    var params = {
       ...
    }

    MyService.fetchTotal(params).then(function(response) {
      $scope.counter = response;
    });

    $scope.incrementCounter = function(){
        MyService.incrementCounter();
    }
});

查看

<div ng-controller="Controller1">
    {{ counter }}
    <span ng-click="incrementCounter()">increment</span>  
</div>

我无法计算出我使用ng-click从API返回的总数增量。这可能吗?

感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:1)

Angularjs服务是单例,因此您可以创建变量并在控制器之间共享它。

请注意下面如何在服务中初始化变量ExecuteCommandList。使用total方法,相同的变量用于与控制器交互。

还要注意init()方法。您的控制器可以首先调用getCounter()来初始化MyService.init变量。

total

请参阅plunker for demo:http://plnkr.co/edit/idSxgm0axk43ydThTbJF?p=preview

答案 1 :(得分:0)

看起来你做的一切都是正确的,除了变量total

您应该在较高级别对其进行初始化,以便从incrementCounter函数中看到它:

function MyService($http) {
  var url = 'URL;
  var total = 0; 

  return {
    fetchTotal: function(p) {
      return $http.get(url, { params: p })
        .then(function(response) {   
          total = response.data.meta.total;
          return total;
        }, function(error) {
          console.log("error occured");
        })
     },
     incrementCounter: function(){
       total++;
     }
  }
}

希望有所帮助