我在理解某个人能解释一下这段代码之间的区别时遇到了一些麻烦:
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;
})
谢谢
这里要做的基本事情是代码使用的是浏览器本机API(navigator.geolocation.watchPosition
),而angularjs没有内置的支持。AngularJS直接支持大部分事情($timeout
,$window
,$http
,$location
,等),但这个特殊的事情是不以角出炉。仍然可以使用BUT,但是您需要在异步操作完成时告诉angular,以便angular会重新评估范围,以便它可以检测到已更改的内容,触发其所有绑定并通常发挥其魔力。
上面两种方法最终都可以达到相同的结果,只是使用不同的技术来做到这一点。$q.defer()
是Promise样式的变体,$scope.$apply
是回调样式的变体,但是它们在示例中的作用本质上是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句