jquery を使用して ajax 呼び出しを実行したり、ここでの例のように位置情報を取得したりするなど、angularjs の外部でなんらかの形式の操作を行うときはいつでも、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();
この方法を常に実行することで、コードは簡単に転送でき、非常に読みやすくなります。また、行数を減らすことが常に最善の方法であるとは限りません。