如何在angularjs中使用HTML5地理定位

Ang*_*yJS 28 javascript geolocation angularjs angularjs-directive angularjs-scope

如何在angularjs中使用HTML5地理定位?我可以使用HTML5获取它; 但是如何将它传递给控制器​​中的angularjs范围?任何样本jsfiddle都会节省我的一天!

Jar*_*red 65

我建议将它抽象为一个服务,这样你的控制器就不会依赖window.navigator,并且避免不必要地使用$ scope.$ apply().这是我在项目中使用的内容:

angular.module('app', []).factory('geolocationSvc', ['$q', '$window', function ($q, $window) {

    'use strict';

    function getCurrentPosition() {
        var deferred = $q.defer();

        if (!$window.navigator.geolocation) {
            deferred.reject('Geolocation not supported.');
        } else {
            $window.navigator.geolocation.getCurrentPosition(
                function (position) {
                    deferred.resolve(position);
                },
                function (err) {
                    deferred.reject(err);
                });
        }

        return deferred.promise;
    }

    return {
        getCurrentPosition: getCurrentPosition
    };
}]);
Run Code Online (Sandbox Code Playgroud)

然后我在我的控制器中使用它,如下所示:

function captureUserLocation() {
    geolocationSvc.getCurrentPosition().then(onUserLocationFound);
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案,它促进了解耦并显示了异步编程的良好使用. (3认同)

Vla*_*ich 34

你可以做点什么

myApp.controller('fooCtrl', function($scope){
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position){
      $scope.$apply(function(){
        $scope.position = position;
      });
    });
  }
})
Run Code Online (Sandbox Code Playgroud)

你需要做$ scope.$ apply来触发地理定位到达时的摘要周期并更新所有的观察者.

  • 如果你创建一个骨架jsfiddle或plunkr我可以填写这个,但你必须自己做一些工作 (8认同)