2016-11-10 60 views
0

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

在帐户页面上有checkbox,他们选择是否要共享其地理位置。
我有一个$watch呃上的复选框...

$scope.$watch("account.shareLocation", function(newValue, oldValue) { 
    if (newValue) { 
     locationService.pushLocation(userPosition); 
    } else { 
     locationService.pushLocation(null); 
    } 
}); 

因此,如果用户选择分享他们的位置newValue === true然后,pushLocation()应该不断地与userPosition调用直到account.shareLocation值(复选框)否则会被更改。

+0

我认为你必须至少设置多久应该轮询的$间隔。您可以轻松创建一个使用$ interval更新位置的服务。当应用程序启动时,启动服务和$间隔应该完成剩下的工作 – Ronnie

回答

1

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

您有inits(我也加入他们的模拟$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'); 
    } 
    } 
}); 
相关问题