我有:
$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,
返回带有未定义变量的错误。
我想要做的是等待设置边界(southWest
和northEast
),然后运行Dajaxice.async.hello(...)
。
所以我需要“等到设定边界”之后的事情。
答案 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