所以我有一个主页面,其中有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()函数中工作?
答案 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(),因为你在处理非角度回调时会禁用任何角度更新!
在第二个例子中这样做,按钮状态应该更新