通常の js から angular に移行しようとしていますが、Google Places ライブラリを使用しているときに奇妙な結果が得られます (他の非同期コールバックでも同じであると想定しています)。
コードは次のとおりです。
var sparkApp = angular.module('sparkApp',[]);
sparkApp.controller('GooglePlacesListCtrl', function GooglePlacesListCtrl($scope) {
$scope.places = [
{'name': 'Nexus S',
'formatted_address': 'Fast just got faster with Nexus S.'},
{'name': 'Motorola XOOM™ with Wi-Fi',
'formatted_address': 'The Next, Next Generation tablet.'},
{'name': 'MOTOROLA XOOM™',
'formatted_address': 'The Next, Next Generation tablet.'}
];
// ***
// **** THIS IS TIED TO AN NG-CLICK
// ***
$scope.gmapSearchButtonClicked = function ()
{
var query = $("#location_search").val();
console.log(getMapRadius());
var request = {
location: map.getCenter(),
radius: getMapRadius(),
query: query
};
service.textSearch(request, $scope.searchCallback);
}
$scope.searchCallback = function (results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
// ***
// **** THIS IS NOT WORKING - IS IT BECAUSE $SCOPE IS IN AN ASYNC CALLBACK?
// **** IT ALSO SHOWS UP IN CONSOLE CORRECTLY
// ***
$scope.places = [{'name': 'Test Scenario',
'formatted_address': 'New Stuff'}];
console.log($scope.places);
}
}
});
基本的に問題は、私の場所がテンプレートで更新されていないことです。最初は正常に読み込まれますが (すべての nexus が含まれます)、検索をクリックした後 (gmapSearchButtonClicked を呼び出します)、コールバックが起動され、すべてがコンソールに正しく表示されていても、何も更新されません。さらに奇妙なのは、もう一度検索をクリックすると、テンプレートが新しいデータで更新されることです。何か案は?