我正在开发一个应用程序,将用户的地理位置推送到服务器(当然还有权限)。
当前,当用户导航到帐户页面时,调用一个方法将其地理位置推送到服务器。
相反,我希望在应用程序运行时运行(如果这是最好的方法)将推动地理位置。这意味着为用户保留的位置始终是最新的,而不仅仅是在访问帐户页面时更新。
帐户页面上有一个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}} (复选框)否则会被更改。
答案 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');
}
}
});