Новое решение
Вызовите глобальный метод из InfoWindow
, используя простой старый обработчик кликов.
`onclick="removePoint(${vm.markerId})"`
Затем используйте замыкание для доступа к виртуальной машине из глобального метода.
const vm = this
window.removePoint = function(id) {
vm.removePoint(id)
}
Если у вас есть несколько экземпляров, вам необходимо расширить этот подход.
Старое решение
Здесь есть 2 вопроса.
Сначала исправьте синтаксическую ошибку в кавычке.
vm.markerid + ")\">Remove</a>"
Еще лучше, воспользуйтесь шаблонными строками, чтобы избежать такого безумия цитат.
vm.infowindow = new google.maps.InfoWindow({ content:`
<a class="btn btn-danger" @click.native="removePoint(${vm.markerid})">Remove</a>`, maxWidth: 300 });
Во-вторых, любая функция внутри шаблона Vue всегда находится в области действия компонента. Предположим, что this.
объект находится впереди. Так что звонить removePoint
- это действительно звонить this.removePoint
.
Определить функцию внутри экземпляра.
vm.removePoint = function(id) {
console.log(`removing point ${id}...`)
}
Или убедитесь, что параметры вашего компонента определяют removePoint
в разделе methods
.
Вы также можете определить removePoint глобально (для объекта окна) и вызвать $window.removePoint(" + vm.markerId + ")"
из шаблона, если используете плагин, такой как https://www.npmjs.com/package/window-plugin.
@click.native=\"$window.removePoint(" + vm.markerid ...
function removePoint(id) {
console.log(`removing point ${id}...`)
}