2016-11-10 39 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'); 
    } 
    } 
}); 
相關問題