了解变量值如何变化?

时间:2015-10-31 21:03:31

标签: angularjs

我刚刚浏览了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比?它永远不会改变,0bound[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 来自哪里?

1 个答案:

答案 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());

返回一个数组,如果使用latlon初始化地图,则会自动设置extend