在应用程序中不断运行服务

时间:2016-11-10 18:44:39

标签: angularjs

我正在开发一个应用程序,将用户的地理位置推送到服务器(当然还有权限)
当前,当用户导航到帐户页面时,调用一个方法将其地理位置推送到服务器。
相反,我希望在应用程序运行时运行(如果这是最好的方法)将推动地理位置。这意味着为用户保留的位置始终是最新的,而不仅仅是在访问帐户页面时更新。

帐户页面上有一个nil,他们会选择是否要分享他们的地理位置。
我在复选框上有一个ch.Consume呃...

checkbox

因此,如果用户选择共享其位置$watch,则应$scope.$watch("account.shareLocation", function(newValue, oldValue) { if (newValue) { locationService.pushLocation(userPosition); } else { locationService.pushLocation(null); } }); 始终使用newValue === true调用pushLocation(),直到值{ {1}} (复选框)否则会被更改。

1 个答案:

答案 0 :(得分:1)

我在这里做了一个小例子:https://jsfiddle.net/ojzdxpt1/2/

如果用户允许,您的主控制器会进入服务中(我还添加了一个模拟$timeout取消选中它。)

var app = angular.module('TestApp', []);

app.controller('TestController', function($scope, $timeout, LocationService) {
  console.log('app init');

  //-- on checkbox change and/or app init;
  var trackLocation = true;
  if (trackLocation) {
    LocationService.start();

    //-- imitate them turning the service off
    $timeout(function() {
      console.log('stop tracking location');
      LocationService.stop();
    },10000);
  }  
});

现在为您提供服务,您可以这样做:

app.service('LocationService', function($interval) {
  var int;
  return {
    start: function() {
      int = $interval(this.saveLocation,3000);
    },
    stop: function() {
      $interval.cancel(int);
    },
    saveLocation: function() {
      console.log('save location');
    }
  }
});