5

我有:

$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(...)​​.

所以我需要类似“等到设置界限”之类的东西。

4

2 回答 2

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);
 });
于 2013-10-17T11:47:23.883 回答
4

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

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

如果您只想在第一次设置边界时执行此操作,则应在完成操作后停止观看:

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

你可以在这里看到它的实际效果:http: //plnkr.co/edit/nTKx1uwsAEalc7Zgss2r ?p=preview

于 2013-10-17T16:06:00.947 回答