2016-11-10 17 views
0

ユーザーのジオロケーションをサーバーにプッシュするアプリケーションを開発中です(もちろん、アクセス許可に関して)です。
現在、ユーザーがアカウントページにナビゲートすると、メソッドが呼び出されてジオロケーションをサーバーにプッシュします。
代わりに、私はサービスが(それが最善の方法ならば)が、アプリケーションが実行されている間に実行して、ジオロケーションをプッシュするようにしたいと思います。つまり、ユーザーのために保持されている場所は常に最新であり、アカウントページが訪問されたときに更新されるだけではありません。アプリ内で常時稼働中のサービス

ジオロケーションを共有するかどうかを選択するアカウントページには、checkboxがあります。ユーザーがnewValue === trueその後、その場所を共有することを選択した場合
私は、だから... ...チェックボックスを

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

$watch ERを持って、pushLocation()は常にaccount.shareLocationの値までuserPositionで起動する必要があります(チェックボックス)が変更されます。

+0

を、私はあなたが、少なくともそれがポーリングする頻度のための$間隔を設定する必要があるだろうと思います。 $ intervalを使って場所を更新するサービスを簡単に作成することができます。アプリのinitsと$ intervalが残りをするときにサービスを開始する – Ronnie

答えて

1

私はここで小さな例を作った:https://jsfiddle.net/ojzdxpt1/2/

をあなたは、ユーザーが(私もそれをオフにそれらのモック$timeoutを追加しました)、それを許可している場合は、サービスをINITSあなたのメインコントローラを持っています。

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'); 
    } 
    } 
}); 
関連する問題