Angularjs:获取当前位置坐标

时间:2017-03-19 06:35:19

标签: angularjs

function (position) {

    mysrclat = position.coords.latitude; 
    mysrclong = position.coords.longitude;

    console.log(mysrclat);
    console.log(mysrclong);

});

如何将此mysrclatmysrclong值传递给html页面或服务文件?

我的控制员:

var lat = 0;
var lan = 0;
var mysrclat = 0;
var mysrclong = 0;
$scope.nearme = function($scope) {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      mysrclat = position.coords.latitude;
      mysrclong = position.coords.longitude;
      console.log(mysrclat);
      console.log(mysrclong);
      $scope.lat = mysrclat;
      $scope.lan = mysrclong;
    });
  }
}

3 个答案:

答案 0 :(得分:1)

当您更改angularJS之外的$ scope值时,您应手动触发摘要周期。 一种方法是使用$scope.$evalAsync

更改您的nearme功能定义如下:

$scope.nearme = function($scope) {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            $scope.$evalAsync(function() {
                $scope.lat = position.coords.latitude;
                $scope.lan = position.coords.longitude;
            })
        });
    }
}

答案 1 :(得分:0)

要实现预期的结果,可以使用$ scope。$ apply()或$ scope.evalAsync

$ scope。$ apply:$ apply()负责执行可用范围的整个观察者列表。

来自Angular文档:
$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。因为我们正在调用角度框架,所以我们需要执行异常处理的适当范围生命周期,执行监视。

使用下面的代码段来获得预期结果

$scope.$apply(function() {
                $scope.lat = mysrclat;
                $scope.lan = mysrclong;
            })

<强> $ scope.evalAsync:
在某些情况下,使用$ scope时可能会出现以下错误。$ apply heavy

错误:$ digest已在进行中

为避免这种情况,请使用$ scope.evalAsync,它将评估当前或下一个摘要周期中的表达式

$scope.$evalAsync(function() {
                $scope.elat = mysrclat;
                $scope.elan = mysrclong;
            })

codepen url供参考 - https://codepen.io/divyar34/pen/dvJrba

答案 2 :(得分:0)

将所有内容全部包裹在$timeout(function(){//logic here})中。它将按预期工作,因为$ timeout内部调用$ apply&amp;一切都会好起来的。