如果地理位置不可用,请禁用按钮

时间:2014-08-21 13:34:37

标签: javascript angularjs

所以我有一个主页面,其中有3个按钮 - 登录,注册和恢复帐户。我希望禁用所有这些按钮,并在地理定位不可用或用户未允许浏览器共享其位置时显示消息。

$scope.btnDisabled = false;
$scope.errorMsg = null;

$scope.checkBrowser = function () {
    if (navigator.geolocation.getCurrentPosition) {
        // let's find out where you are!
        console.log("Got your location");
        $scope.btnDisabled = false;       
    } else {
        $scope.errorMsg = "Warning. Could not locate your position. Please enable your GPS device.";
        //disable the buttons
        $scope.btnDisabled = true;
        //Show errorMessage
        return true
    }

    //errorMessage visibility is set false
    return false;
}

到目前为止,我还没有设法禁用按钮或显示errorMessage(警报消息除外)。

这就是我收到提醒信息的方式:

function getPosition() {
    console.group("geoloc getPosition");
    if (window.navigator) {
        console.log("api supported");
        navigator.geolocation.getCurrentPosition(success, error);
    } else {
        console.log("api fallback");
    }
    console.groupEnd();
}

function success(pos) {
    console.log("geoloc pos ", pos);
}

function error(err) {
    alert("Geolocation identification failed.");
    $scope.btnDisabled = true;
}

为什么$scope.btnDisable在error()函数中工作?

1 个答案:

答案 0 :(得分:0)

你应该使用

navigator.geolocation.getCurrentPosition(
   function() {
      $scope.btnDisabled=false;
      $scope.$apply();
   }, function() {
      $scope.btnDisabled=true;
      $scope.$apply();
   }
});

非常重要的是要知道,getCurrentPosition将调用回调而不是返回一些内容!见https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition

你还要调用$ scope。$ apply(),因为你在处理非角度回调时会禁用任何角度更新!

在第二个例子中这样做,按钮状态应该更新