Javascript 点击谷歌地图时AngularJS打开窗口
我正在用谷歌地图和搜索引擎中显示的不同标记构建一个网站。我可以使用标记在地图中导航,我可以单击标记来显示内容。当我点击搜索结果时,地图平移到结果,我希望同时打开带有标记内容的窗口。 这是我的密码 mymarkers.jsJavascript 点击谷歌地图时AngularJS打开窗口,javascript,angularjs,google-maps,google-maps-api-3,Javascript,Angularjs,Google Maps,Google Maps Api 3,我正在用谷歌地图和搜索引擎中显示的不同标记构建一个网站。我可以使用标记在地图中导航,我可以单击标记来显示内容。当我点击搜索结果时,地图平移到结果,我希望同时打开带有标记内容的窗口。 这是我的密码 mymarkers.js var app = angular.module('myApp'); app.constant("myMarkers", [{ lat: .., lng: .., title:'
var app = angular.module('myApp');
app.constant("myMarkers", [{
lat: ..,
lng: ..,
title:'..'
},{
lat: ..,
lng: ..,
title:'..'
}..]
app.js
var app = angular.module('myApp', []);
angular.module('myApp').controller("myController", ["$scope", "myMarkers", function($scope, myMarkers){
$scope.markers= myMarkers;
$scope.$on("gmaps.marker.click", function(event, map, marker) {
});
//call the directive with the Angular event system
//1st parameter of the listener = event
$scope.centerMapOnMarker = function (marker){
$scope.$broadcast('center-on-marker', marker);
}
}]);
app.directive('myMap', ["myMarkers", function(myMarkers) {
// directive link function
var link = function(scope, element, attrs) {
var map, infoWindow;
var markers = [];
var mapOptions = {..
};
// init the map
function initMap() {..
}
// place a marker
function setMarker(map, position, title, content,link) {..
..
}
//center to the marker
//1st parameter of the listener = event
scope.$on('center-on-marker', function (event, args) {
var center = new google.maps.LatLng(args.lat, args.lng);
map.panTo(center);
map.setZoom(15);
var infowindow = new google.maps.InfoWindow(); <-- not working
infowindow.setContent(args.content);
infowindow.open(map, args);
});
function returnMarker(){
window.alert(markers[0].title);
}
// show the map and place some markers
initMap();
for (var i = 0; i < 100; i++) {
setMarker(map, new google.maps.LatLng(myMarkers[i].lat, myMarkers[i].lng), myMarkers[i].title, myMarkers[i].content, myMarkers[i].icon);
}
};
return {
restrict: 'A',
template: '<div id="gmaps"></div>',
replace: true,
link: link
};
}]);
var-app=angular.module('myApp',[]);
angular.module('myApp').controller('myController'),[“$scope”,“myMarkers”,函数($scope,myMarkers){
$scope.markers=myMarkers;
$scope.$on(“gmaps.marker.click”),函数(事件、映射、标记){
});
//使用角事件系统调用指令
//侦听器的第一个参数=事件
$scope.centerMapOnMarker=函数(标记){
$scope.$broadcast('center-on-marker',marker);
}
}]);
应用程序指令('myMap',[“myMarkers”,函数(myMarkers){
//定向链接功能
变量链接=函数(范围、元素、属性){
var映射,信息窗口;
var标记=[];
var mapOptions={。。
};
//初始化地图
函数initMap(){。。
}
//放置标记
函数setMarker(地图、位置、标题、内容、链接){。。
..
}
//居中
//侦听器的第一个参数=事件
作用域:$on('center-on-marker',函数(事件,参数){
var center=new google.maps.LatLng(args.lat,args.lng);
潘托地图(中);
map.setZoom(15);
var infowindow=new google.maps.infowindow();它发生于infowindow.open
函数期望作为第二个参数,但在您的示例中args
对象不是标记
类。您可以传递选定对象的索引:
不知道为什么,但打开的窗口是空的(没有正确的内容),并且没有平移到正确的标记处..尽管我没有任何错误,但您是否看到了我提供的示例(plunker链接)?,它演示了如何设置信息窗口内容并将其置于markerI之上。我将其作为答案发布是的,非常感谢Vadim,但我在您的plunker链接中遇到了相同的问题。Le Rivage与Chillis餐厅午餐被误解了
<div my-map=""></div>
<div class="myresearch">
<input placeholder="Search a restaurant" ng-model="search">
<div ng-show="search.length">
<ul class="list" ng-repeat="marker in markers | filter: search as filtered">
<li>
<span ng-click="centerMapOnMarker(marker)">
<label class="textr"> {{marker.title}} </label>
</li>
</ul>
<span ng-click="centerMapOnMarker($index)" />
$scope.centerMapOnMarker = function(index) {
$scope.$broadcast('center-on-marker', index);
}
scope.$on('center-on-marker', function(event, index) {
var selectedMarker = markers[index];
map.panTo(selectedMarker.getPosition());
map.setZoom(15);
var infowindow = new google.maps.InfoWindow();
infowindow.setContent(selectedMarker.content);
infowindow.open(map, selectedMarker);
});