У меня есть два магазина в базе данных, и я пытаюсь получить магазины в марке google map, указывая на то, что два магазина.i имеют ng-click в этом информационном окне, чтобы пропускать id здесь. ng-click не работает, есть идея передать id через ng -Щелкните
.controller('MapCtrl', [
'$scope', '$http', '$location', '$window',
function ($scope, $http, $location, $window) {
$http.get('****').success(function (data, dealers, response) {
function initialize() {
var serverData = data;
$scope.locations = [];
for (var i = 0; i < serverData.length; i++) {
var modal = [
data[i].Store_Name, data[i].S_Location.Latitude, data[i].S_Location.Longitude, i, 'images/arrow.svg', data[i].S_Address];
$scope.locations.push(modal);
}
console.log($scope.locations);
//---------------------------------------------------------
//console i am getting like this
var locations = [
['nokia store', '12.971599', '77.594563', '1', 'images/arrow.svg.svg', '55a78953815356700bee698f'],
['samsung store', '12.9065534', '77.5774802', '2', 'images/arrow.svg.svg', '55a786d1815356700bee6982'], ];
//----------------------------------------------------------
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 13,
center: new google.maps.LatLng(12.9667, 77.5667),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < $scope.locations.length; i++) {
//console.log($scope.locations[i][1]);
marker = new google.maps.Marker({
position: new google.maps.LatLng($scope.locations[i][1], $scope.locations[i][2]),
map: map,
icon: $scope.locations[i][4],
animation: google.maps.Animation.DROP,
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent('<div class="marker-box"><div class="marker-title">' + $scope.locations[i][0] + '</div><input type="button" value="Book Now" name="Book Now" ng-click="getid(' + $scope.locations[i][5] + ') "/></div>');
infowindow.open(map, marker);
}
})(marker, i));
}
$scope.map = map;
}
$scope.getid(id) {
console.log(id);
}
});
Итак, в вашем коде:
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent('<div class="marker-box"><div class="marker-title">' + $scope.locations[i][0] + '</div><input type="button" value="Book Now" name="Book Now" ng-click="getid(' + $scope.locations[i][5] + ') "/></div>');
infowindow.open(map, marker);
}
})(marker, i));
ваша функция обратного вызова не запускается до тех пор, пока не будет нажата маркер. К тому времени, когда он нажал, область видимости, вероятно, не знает, что такое "i". Я предполагаю, что "i" становится $scope.locations.length+1
.
Одна вещь, которую вы можете попробовать:
поместите вышеуказанный код во вторичную функцию, затем вызовите его из основного потока, а не запускайте его непосредственно из main thred. IE:
main code:{
//your code
for (i = 0; i < $scope.locations.length; i++){
function_name(parameter 1, i);
}
function function_name= above code;
Обратите внимание, что вышеописанный код sudo, выполните его и попробуйте. Надеюсь, это решает.