我在理解方面有点麻烦,有人可以解释这些代码之间的区别:
app.controller('MainCtrl', function($scope,$http) {
if(navigator.geolocation){
navigator.geolocation.watchPosition(function(position){ //asychronous
$scope.$apply(function(){
$scope.position=position;
});
});
};
和这个
function getPosition(){
var deferred=$q.defer();
if(navigator.geolocation){
navigator.geolocation.watchPosition(function(position){
deferred.resolve(position);
})
}return deferred.promise;
}
var promise=getPosition();
promise.then(function(position){
$scope.position2=position;
})
感谢
答案 0 :(得分:5)
这里发生的基本事情是代码使用的是一个浏览器原生API(navigator.geolocation.watchPosition
),angularjs没有内置的支持。 AngularJS直接支持大多数事情($timeout
,$window
,$http
,$location
等),但这个特殊的东西并没有被加入到角度。这仍然可以使用但是你需要在异步操作完成时告诉角度,因此angular知道重新评估范围,以便它可以检测已经改变的内容,触发所有绑定并通常发挥其魔力。 / p>
上述两种方法最终都达到了相同的效果,它们只是使用不同的技术来实现。 $q.defer()
是承诺风格的变体,$scope.$apply
是回调式变体,但它们与您的示例中的内容完全相同。