每当您在 angularjs 之外执行某种形式的操作时,例如使用 jquery 进行 ajax 调用,或者像此处的示例一样获取地理位置,您都需要让 angular 知道更新自身。我查看了您的 jsfiddle 并将您的一些代码更改为如下所示:
var app = angular.module('myApp', []);
app.controller('RegisterCtrl',function($scope){
$scope.showLoc = false;
navigator.geolocation.getCurrentPosition(function(pos){
$scope.showLoc = true;
$scope.$apply();
},function(err){
$scope.showLoc = false;
$scope.$apply();
});
});
现在 showLoc 在更新时更改为 true。这是使用 $apply() 方法的文档http://docs.angularjs.org/api/ng.$ro otScope.Scope#$apply
jsFiddle http://jsfiddle.net/yLFNP/6/
编辑:我的答案已被编辑,但我不同意编辑。虽然您可以将 $apply 方法包装在 $scope.showLoc = false 周围以使其“更短”,但您实际上只保存了 1 个字符(分号)。此外,我更喜欢在一堆逻辑之后使用 $apply 方法,而不是将所有内容都包装在其中。如果我对范围做了更多的事情,你要么必须像这样编写每一个额外的事情:
$scope.$apply($scope.var1 = newValue1);
$scope.$apply($scope.var2 = newValue2);
$scope.$apply($scope.var2 = newValue3);
我觉得有点矫枉过正,或者你可以使用函数方法:
$scope.$apply(function(){
$scope.var1 = newValue1;
$scope.var2 = newValue2;
$scope.var3 = newValue3;
});
或者直接在需要“应用”的代码之后:
$scope.var1 = newValue1;
$scope.var2 = newValue2;
$scope.var3 = newValue3;
$scope.$apply();
通过一直使用这种方法,您的代码很容易转移并且非常易读。此外,更少的线条并不总是最好的方法。