Ваша кнопка не работает, потому что вы пытаетесь вызвать метод, который находится практически в строке
"<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") в сочетании с elementRef
angular, как в следующем примере:
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");
}
Демо