2016-11-10 1 views
0

Ich entwickle eine App, die Benutzer geolocation auf den Server (in Bezug auf Berechtigungen, natürlich).
Wenn der Benutzer derzeit zur Kontoseite navigiert, wird eine Methode aufgerufen, um seine geografische Position auf den Server zu übertragen.
Stattdessen möchte ich einen Service (wenn das die beste Methode ist) laufen, während die App ausgeführt wird, die die Geolocation schieben wird. Dies bedeutet, dass der für den Benutzer gehaltene Standort immer auf dem neuesten Stand ist und nicht nur aktualisiert wird, wenn die Kontoseite besucht wird.Ständig laufenden Dienst während in App

Es gibt eine checkbox auf der Konto-Seite, wo sie auswählen, ob sie ihre Geolocation teilen möchten oder nicht.
ich ein $watch er auf die Checkbox haben ...

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

Also, wenn der Benutzer seinen Standort zu teilen wählt (newValue === true) dann pushLocation() sollte ständig mit dem userPosition, bis der Wert von account.shareLocationaufgerufen werden (das Kontrollkästchen) ist anders geändert.

+0

Ich glaube, Sie für ein $ Intervall auf mindestens gesetzt haben würde, wie oft es abzufragen. Sie können problemlos einen Service erstellen, der $ interval zum Aktualisieren seines Standorts verwendet. Starten Sie den Dienst, wenn die App inits und das $ interval den Rest erledigen sollen – Ronnie

Antwort

1

machte ich ein kleines Beispiel hier: https://jsfiddle.net/ojzdxpt1/2/

Sie haben Ihre Haupt-Controller, der den Dienst INiTS, wenn der Benutzer es erlaubt hat (Ich habe auch ein Mock $timeout von ihnen es unchecking).

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); 
    } 
}); 

Jetzt für Sie da könnten Sie so etwas tun:

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'); 
    } 
    } 
}); 
Verwandte Themen