javascript - Angular JS : Increment a Counter in a Service From Controller

标签 javascript angularjs angularjs-scope

我正在尝试从我的服务中的 API 获取计数器的值,然后在我的 Controller 中递增该计数器:

服务

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 返回的总数的增量。这可能吗?

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

最佳答案

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

请注意下面变量 total 是如何在服务中初始化的。通过使用 getCounter() 方法,相同的变量用于与 Controller 交互。

另请注意 init() 方法。您的 Controller 可以首先调用 MyService.init 来初始化 total 变量。

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

function MyService($http) {
  var url = 'URL';
  var total = 0; /* or some other initial value*/

  return {

    init: function(){
      $http.get(url, { params: p })
        .then(function(response) {   
          total = response.data.meta.total;

        }, function(error) {
          console.log("error occured");
        });
    },
    incrementCounter: function(){
      total++;
    },
    getCounter: function(){
     return total;
    }
  }
}

演示见 plunker:http://plnkr.co/edit/idSxgm0axk43ydThTbJF?p=preview

关于javascript - Angular JS : Increment a Counter in a Service From Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404307/

相关文章:

javascript - 父 View 上的 Angular UI 路由器动画

angularjs - 如何使用 AngularJS 发送 HTML 电子邮件?

javascript - 处理切换按钮上的焦点

javascript - 当值从 iframe 更改时范围不更新

javascript - 使 JQuery 下拉代码可重用

javascript - Jade 变渲染

javascript - 有效地使用for循环

javascript - 来自 Google Spreadsheet for Apps 脚本网站/webapp 中存储的数据的 HTML 列表 - 模板化 HTML

javascript - Angular 隔离范围和属性

angularjs - 使指令函数在父范围内可访问而无需事件