2017-09-06 12 views
2

私のデータベースからGoogleマップに表示する領域のリストをプルします。 reverse geocodingを使って各エリアに最も近い都市を表示したいが、それを稼働させることはできない。 私はAngularJSと約束した経験があり、Stackoverflowを検索しましたが、この問題の解決策は見つかりませんでした。ng-repeatの項目から逆ジオコードをフェッチして表示AngularJS

HTML:

<div ng-repeat="area in vm.areas"> 
<span>{{area.name}}</span> 
<span>Close to: </span> <span>{{vm.getCity(area)}}</span> 
</div> 

JS:

vm.getCity = function(area){ 
var center = getCenter(area.paths); 
getAddress(center[0], center[1]).then(function(city){ 
    console.log(city); 
    return city; 
}) 
} 

function getAddress (latitude, longitude) { 
    return $q(function (resolve, reject) { 
     var request = new XMLHttpRequest(); 

     var method = 'GET'; 
     var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true'; 
     var async = true; 

     request.open(method, url, async); 
     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       if (request.status == 200) { 
        var data = JSON.parse(request.responseText); 
        var results = data.results; 
        var returnString = "" 
        for(var i=0; i<results.length; i++){ 
        var types = results[i].types; 
        if(types[0] === 'locality'){ 
         returnString = results[i].address_components[0].long_name; 
        } 
        } 
        resolve(returnString); 
       } 
       else { 
        reject(request.status); 
       } 
      } 
     }; 
     request.send(); 
    }); 
}; 

私は正しい都市がコンソールに表示されているが、それらはビューに表示されないことがわかります。どのような助けが大いに感謝!

+0

、https://stackoverflow.com/questions/34953005/how-to-bind-content-to-individual-div-with-promise – tobiasfriden

答えて

0

Angular's $http serviceを使用していない理由は何ですか?それを使用せず、カスタムHTTP呼び出しを行うことで、Angularはあなたがそれをやっていることを知らない。したがって、データを取得すると、Angularは変更されたことを知らず、データやビューを更新しません。 Angularの$httpサービスを利用する場合は、そのエコシステム内にとどまり、変更内容を把握することができます。代わりに、ディレクティブを使用してそれを解決するために管理

$http({ 
    method: 'GET', 
    url: 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true' 
}).then(function successCallback(response) { 
    // var data = ...... 
}, function errorCallback(response) { 

}); 
+0

によると、この実際になります角度がhttp-requestを認識しました、ありがとう!ただし、ページがレンダリングされるときに、値の変更=>ページが再度レンダリングされ、ループ内でスタックされる関数が呼び出されるという問題があります。どのようにこれを修正するための任意のアイデア? – tobiasfriden

+0

ページが再レンダリングされるのはなぜですか?あなたは、再読み込みを意味しますか?それを引き起こしているのは何ですか?私はあなたのコードでページをリロードするものは何も見えません。 –

+0

多分、これは起こっていません、私は "10 $のダイジェスト()反復に達したエラー"を取得しているとバインドされたデータが繰り返しロードされたためだと思った – tobiasfriden

関連する問題