AngularJS $ scope。$ apply与$ q

用户74627

我在理解某个人能解释一下这段代码之间的区别时遇到了一些麻烦:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章