$ scope push不起作用

时间:2015-04-03 14:25:55

标签: javascript angularjs google-maps steroids supersonic

我对此代码有疑问。

在我的控制器中我有这个。

$scope.spiagge = [];
var distanza = function(info, posizione) {
        var request = {
            origin : posizione,
           destination : new google.maps.LatLng(info.latitudine, info.longitudine),
           travelMode : google.maps.TravelMode.DRIVING
       };
       directionsService.route(request, function(response, status) {
           if (status == google.maps.DirectionsStatus.OK) {
               //$scope.directionsDisplay.setDirections(response);

               info.distanza = response.routes[0].legs[0].distance.text;

               //distanza= response.routes[0].legs[0].distance.value/1000 ;
           }

        riempi(info);

    });
//riempi(info);
}
var riempi = function(spiaggia) {
    //alert("distanza " + spiaggia.distanza);
    $scope.spiagge.push(spiaggia);
}

如果我将riempi(info)放在directionsService函数之外,$scope.spiagge.push无法使用info.distanza。我认为这是因为info.distanza是directionService的局部变量。如果我放在里面,就像在这里的代码一样,它根本不起作用;但是riempi函数会看到包含distanza的每个info值。

我不知道该怎么办。 这是视图

<div class="lista_home" ng-repeat= "spiaggia in spiagge">
    <h1>{{spiaggia.nome}}</h1> <p>distanza {{spiaggia.distanza}} km </p>
  </div>

抱歉我的英文。 有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

我认为发生的事情是当它在directionService内部时,该功能超出了范围。您可以尝试使用$rootScope来覆盖该功能。而不是使变量将函数添加到控制器的范围。另外,不要忘记在控制器中注入$rootScope作为依赖项。

$scope.spiagge = [];
    var distanza = function(info, posizione) {
            var request = {
                origin : posizione,
               destination : new google.maps.LatLng(info.latitudine, info.longitudine),
               travelMode : google.maps.TravelMode.DRIVING
           };
           directionsService.route(request, function(response, status) {
               if (status == google.maps.DirectionsStatus.OK) {
                   //$scope.directionsDisplay.setDirections(response);

                   info.distanza = response.routes[0].legs[0].distance.text;

                   //distanza= response.routes[0].legs[0].distance.value/1000;
               }

            $rootScope.riempi(info);//go to the rootscope and find riempi

        });

    }
    $scope.riempi = function(spiaggia) {
        //alert("distanza " + spiaggia.distanza);
        $scope.spiagge.push(spiaggia);
    }

答案 1 :(得分:0)

因为googlemaps不是......因为角色不对...视图不会更新。你能尝试添加$ scope。$ apply();在$ scope.riempi函数的末尾?