2015-05-09 71 views
0

当我插入console.log($scope)到我的代码,我得到以下结果:如何访问角度范围内的变量?

$get.k.$new.a.$$childScopeClass.$$childScopeClass {$$childTail: null, $$childHead: null, $$nextSibling: null, $$watchers: Array[4], $$listeners: Object…} 
$$childHead: null 
$$childScopeClass: null 
$$childTail: null 
$$listenerCount: Object 
$$listeners: Object 
$$nextSibling: null 
$$prevSibling: $get.k.$new.a.$$childScopeClass.$$childScopeClass 
$$watchers: Array[4] 
$id: "005" 
$parent: Object 
Bad: false 
Good: true 
Search: function() { 
address: "63146" 
focus: "63146" 
this: $get.k.$new.a.$$childScopeClass.$$childScopeClass 
__proto__: Object 

我感兴趣的变量是Good: true。但是,当我在下一行呼叫console.log($scope.Good)时,它将返回false

如何调用上述在控制台中返回true的“Good”变量?

编辑: 控制器

app.controller('locationController', function ($scope) { 
    $scope.Good = false; 
    $scope.Bad = false; 

    var mapOptions = { 
     center: { lat: 38.68, lng: -90.46 }, 
     zoom: 8 
    }; 

    var image = { 
     url: 'app/assets/img/marker.png' 
    } 

    var map = new google.maps.Map(document.getElementById('map'), 
     mapOptions); 
    $scope.Search = function() { 
     $scope.Good = false; 
     $scope.Bad = false; 
     var address = $scope.address; 
     var radius = parseInt(50, 10) * 1000; 
     var marker_start = new google.maps.Marker({ 
      position: { lat: 38.688757, lng: -90.464391 }, 
      map: map, 
      icon: image, 
      title: "" 
     }); 

     var fill = '#fff'; 
     var populationOptions = { 
      strokeColor: '#66FF99', 
      strokeOpacity: 0.2, 
      strokeWeight: 2, 
      fillColor: fill, 
      fillOpacity: 0.35, 
      map: map, 
      center: new google.maps.LatLng(38.68, -90.46), 
      radius: 80000 
     }; 

     var lat = ''; 
     var lng = ''; 
     var geocoder = new google.maps.Geocoder(); 
     var marker_user = null; 

     geocoder.geocode({ 'address': address }, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       lat = results[0].geometry.location.lat(); 
       lng = results[0].geometry.location.lng(); 
       marker_user = new google.maps.Marker({ 
        position: { lat: lat, lng: lng }, 
        map: map, 
        animation: google.maps.Animation.DROP, 
        title: "Your Location" 
       }); 

       if (google.maps.geometry.spherical.computeDistanceBetween(marker_user.getPosition(), marker_start.getPosition()) < 80000) 
        $scope.$apply(function() { $scope.Good = true; }); 
       else 
        $scope.$apply(function() { $scope.Bad = true; }); 
      } 
     }); 

     console.log($scope); 
     console.log($scope.Good); 
     console.log($scope.Bad); 
     var cityCircle = new google.maps.Circle(populationOptions); 
    }; 
}); 
+0

向我们展示你的控制器 – hurricane

+0

编辑,包括控制器。 – cul8r

+0

当您将一个“对象”记录到控制台时,这是一个常见问题。控制台向您显示该对象的瞬间值。我会试着找到一个现有答案,解释为什么你看到你看到的东西,如果有的话,请回到这里。 –

回答

3

Good成为事实,只有传递给geocoder.geocode()回调函数被调用。但是你在之前打印它它已被调用,之后要求地理编码器进行地理编码。

  1. 要求地理编码器进行地理编码。这将HTTP请求发送到谷歌
  2. 打印好:它仍然是假
  3. 当从谷歌的响应进来,执行回调和好成为真正的
+0

请注意,他将'$ scope'和'$ scope.Good'打印到在执行回调之前控制台全部。看到我上面的评论... –

+0

错误是的,这几乎正是我的答案所说的。 –

+0

不,如果问题出在你记录'$ scope'时显示的值,那也是错误的。在这种情况下,它显示为真。我暗示[这种问题](http://stackoverflow.com/questions/7389069/console-log-object-at-current-state)正在发生。 –