Angularjs等到

时间:2013-10-17 11:41:54

标签: angularjs angularjs-directive angularjs-scope

我有:

$scope.bounds = {}

稍后在我的代码中:

$scope.$on('leafletDirectiveMap.load', function(){
    console.log('runs');
    Dajaxice.async.hello($scope.populate, {
                'west' : $scope.bounds.southWest.lng,
                'east': $scope.bounds.northEast.lng,
                'north' : $scope.bounds.northEast.lat,
                'south': $scope.bounds.southWest.lat,
    });
});

你可以在乞讨时看到它们是空的边界,但它们稍后(几毫秒)加载了一个javascript库(leaflet angular)。但是$scope.$on(...)在设置边界之前运行,因此'west' : $scope.bounds.southWest.lng,返回带有未定义变量的错误。

我想要做的是等待设置边界(southWestnorthEast),然后运行Dajaxice.async.hello(...)

所以我需要“等到设定边界”之后的事情。

2 个答案:

答案 0 :(得分:5)

您可以将$watch用于此目的,如下所示:

 $scope.$on('leafletDirectiveMap.load', function(){

       $scope.$watch( "bounds" , function(n,o){  

           if(n==o) return;

           Dajaxice.async.hello($scope.populate, {
               'west' : $scope.bounds.southWest.lng,
               'east': $scope.bounds.northEast.lng,
               'north' : $scope.bounds.northEast.lat,
               'south': $scope.bounds.southWest.lat,                
            });

       },true);
 });

答案 1 :(得分:3)

如果你想在每次边界改变时这样做,你应该使用$ watch表达式:

$scope.$watch('bounds',function(newBounds) {
   ...          
});

如果你只想在第一次设定界限时这样做,你应该在完成任务后停止观看:

var stopWatching = $scope.$watch('bounds',function(newBounds) {
  if(newBounds.southWest) {
     ...
     stopWatching();
  }
});

您可以在此处看到它:http://plnkr.co/edit/nTKx1uwsAEalc7Zgss2r?p=preview