我刚刚浏览了angular-openlayers-directive并找到了一个示例 HERE 。
现在我有一个有角度的问题,你可以看到如下代码:
onPostExecute()
我非常有兴趣知道以下代码行中会发生什么:
在对象文字ciaro中查看: var app = angular.module("demoapp", ["openlayers-directive"]);
app.controller("DemoController", [ "$scope", "olHelpers", function($scope, olHelpers) {
angular.extend($scope, {
offset: 0,
cairo: {
lat: 30.0047,
lon: 31.2586,
zoom: 10,
bounds: []
}
});
$scope.$watch("offset", function(offset) {
$scope.cairo.bounds[0] += parseFloat(offset, 10);
$scope.cairo.bounds[1] += parseFloat(offset, 10);
$scope.cairo.bounds[2] -= parseFloat(offset, 10);
$scope.cairo.bounds[3] -= parseFloat(offset, 10);
});
}]);
,然后查看下面的bounds: []
:
$watch
现在我插入了以下测试代码,以查看偏移值的确切含义以及是否更改:
$scope.$watch("offset", function(offset) {
$scope.cairo.bounds[0] += parseFloat(offset, 10);
$scope.cairo.bounds[1] += parseFloat(offset, 10);
$scope.cairo.bounds[2] -= parseFloat(offset, 10);
$scope.cairo.bounds[3] -= parseFloat(offset, 10);
});
我总是将setTimeout(function(){
console.log($scope.offset);
}, 3000);
设置为值,那么为什么焦点上的$ watch比?它永远不会改变,0
,bound[0]
,bound[1]
和bound[2]
的价值如何变化?我的意思是他们的价值不是bound[3]
?怎么会 ?任何人都可以解释一下吗?
编辑 ::
刚做了一点测试,发现了以下内容:
即使我删除了以下代码:
0
我添加以下测试代码:
$scope.$watch("offset", function(offset) {
$scope.cairo.bounds[0] += parseFloat(offset, 10);
$scope.cairo.bounds[1] += parseFloat(offset, 10);
$scope.cairo.bounds[2] -= parseFloat(offset, 10);
$scope.cairo.bounds[3] -= parseFloat(offset, 10);
});
我在控制台中收到以下内容:
setTimeout(function(){
console.log($scope.cairo.bounds[0] + ' ' + $scope.cairo.bounds[1] + ' ' + $scope.cairo.bounds[2] + ' ' + $scope.cairo.bounds[3]);
}, 3000);
30.76009536132813 29.766565657014212 31.757104638671876 30.242264176913594
来自哪里?
答案 0 :(得分:1)
答案在angular-openlayers-directive的来源中撒谎,请查看以下源代码:
if (isArray(scope.center.bounds)) {
var extent = view.calculateExtent(map.getSize());
var centerProjection = scope.center.projection;
var viewProjection = defaults.view.projection;
scope.center.bounds = ol.proj.transformExtent(extent, viewProjection, centerProjection);
}
所以我们定义bound:[]
并且上面的代码起到了作用,下面一行:
var extent = view.calculateExtent(map.getSize());
返回一个数组,如果使用lat
和lon
初始化地图,则会自动设置extend
。