javascript - 单击 InfoWindow Typescript Angular2

标签 javascript google-maps angular typescript ionic2

您好,我已经搜索了好几个小时了,希望您能帮助我 :)

想法

如果您在 Google map 上单击信息窗口,我想显示一个页面。 (使用 Ionic 2 中的 ModalController)

问题

点击不起作用..

var infoWindow = new google.maps.InfoWindow({
      content: '<h2 (click)="goToProductPage(product)">Click me</h2>'
    });


goToProductPage(product :any){
    let modal = this.modalCtrl.create(ProductPage, product);

    modal.present();
}

遗憾的是,这不起作用,我还尝试了一个内容节点,使用 onclick="",使用 javascript 函数..

这是另一个 question with the same problem未解决。

最好的问候, 路易斯

编辑

setProductMarker(product :any, productLocation :any){

    var contentWindow = "<h2 id='clickableItem'>Click me</h2>" + product.productName + "<img src='" + product.imgUrl + "' width='60' height='60' /> <br/>" + product.date

    var clickableItem = document.getElementById('clickableItem');

    clickableItem.addEventListener('click' , () => {
       this.goToProductPage(product);
     });

    var productMarker = new google.maps.Marker({
      position: new google.maps.LatLng(JSON.parse(productLocation).latitude, JSON.parse(productLocation).longitude),
      map: this.map,
      title:"Product"
    })


    var infoWindow = new google.maps.InfoWindow({
      content: contentWindow
    });

    infoWindow.addListener('click', () => {
      alert("yeah");
      console.log("yeah");
    });


  productMarker.addListener('click', event => {
    infoWindow.open(this.map, productMarker);
    this.productNow = product;
    });

  }

最佳答案

解决方案

感谢Daniel Cooke的帮助与

var clickableItem = document.getElementById('clickableItem');
   clickableItem.addEventListener('click' , () => this.goToProductPage())

-> 问题是我的 InfoWindow 内容还没有准备好进行 DOM 操作。


因此,我添加了一个 domready 监听器,这要归功于 question .

google.maps.event.addListener(infoWindow, 'domready', function() {
   // your code
});

这里是完整的源代码:

setProductMarker(product :any, productLocation :any){
    var contentWindow = product.productName + "<h2 id='clickableItem'>Click me</h2><img src='" + product.imgUrl + "' width='60' height='60' /> <br/>" + product.date;


    var productMarker = new google.maps.Marker({
      position: new google.maps.LatLng(JSON.parse(productLocation).latitude, JSON.parse(productLocation).longitude),
      map: this.map,
      title:"Product"
    })


    var infoWindow = new google.maps.InfoWindow({
      content: contentWindow
    });

    google.maps.event.addListener(infoWindow, 'domready', () => {
      //now my elements are ready for dom manipulation
      var clickableItem = document.getElementById('clickableItem');
      clickableItem.addEventListener('click', () => {
        this.goToProductPage(product);
      });
    });

  productMarker.addListener('click', event => {
    infoWindow.open(this.map, productMarker);
    this.productNow = product;
    });

  }

再次感谢丹尼尔的耐心等待! :)

关于javascript - 单击 InfoWindow Typescript Angular2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321635/

相关文章:

javascript - 从 Javascript 输入变量到 Mysqli 数据库

Angular 6 - 每 10 秒运行一次服务方法

Angular 4 ng 测试失败 : Template parse errors: 'router-outlet' is not a known element:

javascript - 如何获取单个数组中差异最大的元素?

javascript - 单击除特定元素的特定元素之外的正文

javascript - 如何使 DataTables 能够过滤选定的列

c# - 使用 SharpMap 库生成 Google map 叠加层

javascript - 在 JavaScript 和 Knockout.js 中,为什么我不能返回变量?为什么我必须像方法一样返回变量?

google-maps - PrimeFaces gmap 不渲染

angular - “无法解析模块...相对于...”编译应用程序时出错