地图控制器中ui-gmap-marker的标记点击事件未触发

Marker click event not firing for ui-gmap-marker in Map Controller

本文关键字:事件 控制器 ui-gmap-marker 地图      更新时间:2023-09-26

我有一个带有谷歌地图控制器的应用程序。当我在手机上运行它时,点击事件不会触发。但是,当我在纹波模拟器上测试它时,单击事件会触发。下面是映射页面和相应的控制器。

<ons-toolbar>
<div class="left"><ons-back-button>Back</ons-back-button></div>
<div class="center page-title">Map MapController2</div>
</ons-toolbar>
<ui-gmap-google-map center="map.center" refresh="true" zoom="map.zoom" draggable="true">
    <ui-gmap-marker idkey="marker.id" ng-repeat="marker in map.markers" coords="marker" icon="marker.icon" click="onMarkerClicked()">
        <ui-gmap-window show="windowOptions" coords="marker" closeClick="closeClick">
            <div style="color: black">
        {{marker.title}}<br/>
        at {{marker}}
            </div>
        </ui-gmap-window>
    </ui-gmap-marker>
</ui-gmap-google-map>

// Map Controller
app.controller('MapController2', function($scope, $rootScope, $http) {
    var data = {};
    data.map = {
        zoom: 12,
        center: {
            latitude: 27.949,
            longitude: -81.958
        },
        markers: [
            {
                id: 1,
                icon: 'img/blue_marker.png',
                latitude: 27.949,
                longitude: -81.999,
                title: 'This is where you are asdf;lkj  asdf;lj  ;asdf;lkasf; ;jasdfpoiarwtonmsad'
            },
            {
                id: 2,
                latitude: 27.949,
                longitude: -81.958,
                title: 'Job Site'
            },
            {
                id: 3,
                icon: 'img/plane.png',
                latitude: 27.949,
                longitude: -81.94,
                title: 'Airport'
            }]
    };
    $scope.windowOptions = false;
    $scope.onMarkerClicked = function () {
        this.windowOptions = !this.windowOptions;
    };
    $scope.closeClick = function () {
        this.windowOptions = false;
    };
    $scope.map = data.map;
});

经过一番挖掘,我找到了解决方案。我使用的HTML如下所示。我使用"ui-gmap-marker"(带有"s")而不是"ui-gmap-marker"。此外,我必须用' data-tap-disabled= " true " '封装谷歌地图,以使其在手机上工作。

<ons-page class="map" ng-controller="MapController2" sliding-menu-ignore="true">
    <ons-toolbar>
        <div class="left"><ons-back-button>Back</ons-back-button></div>
        <div class="center page-title">Map MapController</div>
    </ons-toolbar>
    <ui-gmap-google-map center="map.center" refresh="true" zoom="map.zoom" draggable="true" data-tap-disabled="true">
        <ui-gmap-window show="map.window.show" coords="map.window.model" options="map.window.options" closeClick="map.window.closeClick()">
            <div style="color: black">
                {{map.window.title}}
            </div>
        </ui-gmap-window>
        <ui-gmap-markers idkey="marker.id" models="map.markers" coords="'self'" doCluster="false" fit="'true'" icon="'icon'" events="map.markersEvents " options="'options'"></ui-gmap-markers>
    </ui-gmap-google-map>
</ons-page>

然后控制器看起来像这样:

// Map Controller
    app.controller('MapController2', function($scope, $rootScope, $http) {
        var data = {};
        data.map = {
            zoom: 12,
            center: {
                latitude: 27.949,
                longitude: -81.958
            },
            markers: [
                {
                    id: 1,
                    icon: 'img/blue_marker.png',
                    latitude: 27.949,
                    longitude: -81.999,
                    title: 'This is where you are'
                },
                {
                    id: 2,
                    latitude: 27.949,
                    longitude: -81.958,
                    title: 'Job Site'
                },
                {
                    id: 3,
                    icon: 'img/plane.png',
                    latitude: 27.949,
                    longitude: -81.94,
                    title: 'Airport'
                }],
            markersEvents: {
                click: function(marker, eventName, model, arguments) {
                    console.log('Marker was clicked (' + marker + ', ' + eventName);//+', '+mydump(model, 0)+', '+mydump(arguments)+')');
                    $scope.map.window.model = model;
                    $scope.map.window.model = model;
                    $scope.map.window.title = model.title;
                    $scope.map.window.show = true;
                }
            },
            window: {
                marker: {},
                show: false,
                closeClick: function() {
                    this.show = false;
                },
                options: {}, // define when map is ready
                title: ''
            }
        };
        //$scope.window = false;
        $scope.onMarkerClicked = function (m) {
            //this.windowOptions = !this.windowOptions;
            console.log('Marker was clicked');
            console.log(m);
        };
        $scope.closeClick = function () {
            this.window = false;
        };
        $scope.map = data.map;
    });