angular - 为什么我在传单弹出窗口中的按钮不起作用?

标签 angular typescript leaflet popup

我有一张带有很多标记的传单 map ,单击它们时会出现一些带有编辑和删除按钮的信息!然而出于某种原因,传单似乎掩盖了这些按钮,无论哪种方式,它们都无法正常工作。

这是我的带有标记和弹出窗口的 map 组件:

refresh() {
    this.artworkService.retrieveAll().then((artworkList) => {
      this.artworkList = artworkList;
      for (let artwork of this.artworkList) {
        const popupOptions = { className: "customPopup" };
       const popupContent =
          "<span class='customPopup'><b>" +
          artwork.name +
          "</b></span>" +
          "<br/>" +
          artwork.filename +
           "<br/>" +
          artwork.firstname + " " + artwork.lastname +
          "<br/>" +
          artwork.streetname + artwork.streetnumber + ", " + artwork.zipcode +
          "<br/>" +
          "<button (click)='editArtwork()'><i class='fa fa-edit mr-1></i></button>" + "<i class='fa fa-trash ml-1 (click)='deleteArtwork()'></i>";
    console.log(artwork.name);
        L.marker([artwork.latitude, artwork.longitude], this.markerIcon)
          .addTo(this.map)
          .bindPopup(popupContent, popupOptions);
      }
   });
}

editArtwork() {
  alert("editing");
}

deleteArtwork() {
  alert("deleteing");
}

我点击按钮但没有任何反应,控制台中也没有任何显示。

最佳答案

您的按钮不起作用,因为您正试图调用实际上驻留在字符串中的方法

 "<button (click)='editArtwork()'><i class='fa fa-edit mr-1></i></button>" + "<i class='fa fa-trash ml-1 (click)='deleteArtwork()'></i>";

是分配给变量而不是 html 的字符串,这就是您的方法调用不起作用的原因。

不确定这是否是最佳方法,但一种方法是: 1.为每个按钮分配一个唯一的类 2. 将 on("popupopen") 事件处理程序与 Angular 的 elementRef 结合使用,如下例所示:

const popupOptions = {
  className: "customPopup"
};
const _this = this;

for (let artwork of this.artworkList) {
  const popupInfo = `
  ${artwork.name} <br> ${
    artwork.filename
  } <br> <button class="edit">Edit</button>
  <br> <button class="delete">Delete</button>
  `;
  L.marker([artwork.latitude, artwork.longitude], this.markerIcon)
    .addTo(this.map)
    .bindPopup(popupInfo, popupOptions)
    .on("popupopen", () => {
      _this.elementRef.nativeElement
        .querySelector(".edit")
        .addEventListener("click", e => {
          _this.editArtwork();
        });
    })
    .on("popupopen", () => {
      _this.elementRef.nativeElement
        .querySelector(".delete")
        .addEventListener("click", e => {
          _this.deleteArtwork();
        });
    });
}



editArtwork() {
  alert("editing");
}

deleteArtwork() {
  alert("deleting");
}

Demo

关于angular - 为什么我在传单弹出窗口中的按钮不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352169/

相关文章:

angular - 父组件向子组件获取参数

javascript - 已发送回复 1 个回复迟到

javascript - Angular 4 SEO错误

angular - 以 Angular 6+ 向指定模块注入(inject)服务

javascript - 传单:在光标位置而不是 LineString 中心打开弹出窗口

mongodb - 我无法使用 angular 2 发布到我的 mongodb 服务器

angular - 捕获异常后不在开发控制台中显示 500 错误

typescript - 如何在 typescript + react native 中为主题功能组件正确设置/使用 ref

angular - 调用传单标记的 onClick 时 Material 对话框卡住

javascript - 是否可以制作一个由多个对象组成的图层,可在传单中拖动?