私はAngularが初めてで、イベントハンドラー内の場所を変更する際に問題があります。ハンドラーは、Google マップに配置されたマーカー用です。私は ng-map を使用しています (これはかなり素晴らしいです)。
マーカーを作成するコードは次のとおりです (これは $http get の成功コールバック内で実行されます)。
for( i = 0; i < data.Pins.length; i++ )
{
var marker = new google.maps.Marker({
title: data.Pins[i].StreetAddress,
position: new google.maps.LatLng(data.Pins[i].Latitude,data.Pins[i].Longitude),
data: data.Pins[i],
index: i,
});
google.maps.event.addListener(marker, 'click', function(tgt) {
$scope.pinClicked(marker);
});
marker.setMap($scope.map);
$scope.markers.push(marker);
}
イベント ハンドラは非常に単純です。
$scope.pinClicked = function(marker) {
if( marker.data.Homes.length == 1) $location.path("/home");
else $location.path("/unit");
};
マーカーをクリックすると、ハンドラーが実行され、if/then/else ステートメントが実行されます。ただし、場所は変わりません。
これは、Googleマップを介してイベントリスナーを設定したため、角度の「コンテキスト」の外にいるためですか?
追加情報
window.location の使用に関する提案に感謝します。前に言及しなかったのは、マップが部分ビューの一部であるため、ページのリロードをトリガーしたくないということです。場所の変更に基づいて角度を付けて部分ビューを更新したいのです。$location.path('/unit') はそのイベント ハンドラーの外部で問題なく動作するため、これができることはわかっています。