function (position) {
mysrclat = position.coords.latitude;
mysrclong = position.coords.longitude;
console.log(mysrclat);
console.log(mysrclong);
});
如何将此mysrclat
和mysrclong
值传递给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;
});
}
}
答案 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;一切都会好起来的。