gpt4 book ai didi

javascript - 单击事件时从 jquery 触发 vue 方法

转载 作者:数据小太阳 更新时间:2023-10-29 05:56:51 24 4
gpt4 key购买 nike

我正在尝试将点击事件附加到已存在的 dom 元素。

<div class="logMe" data-log-id="{{ data.log }}"></div>
...
<div id="events"></div>

我似乎无法在我的 jquery 单击处理程序中访问外部 vue 方法。它将抛出 logData is not defined

new Vue({
el: '#events',
mounted() {
$('.logMe').on('click', function() {
const data = $(this).data('log-id');
this.logData(data); // throws logData is not defined
});
},
methods: {
logData(id) {
console.log(id); // never fires
... hit server
},
},
});

如果有人知道将点击事件附加到 .html 元素的更好方法,那就太好了!但是我怎样才能冒泡并找到我的 vue 方法呢? Here's a fiddle to illustrate

最佳答案

要使您的代码正常工作,您可以这样编写:

console.clear()

new Vue({
el: '#events',
mounted() {
$('.logMe').on('click', (evt) => {
console.log("called")
const data = $(evt.target).data('logId');
this.logData(data);
});
},
methods: {
logData(id) {
console.log(id);
},
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://unpkg.com/vue@2.4.2"></script>
<div class="logMe" data-log-id="10">Something</div>
<div id="events"></div>

请注意,代码使用箭头函数来定义点击处理程序,以便捕获适当的 this 以调用 Vue 上的 logData 方法。但是,这样做意味着您失去了想要从数据属性获取数据的 this,因此该示例使用 evt.target

还有一种替代方法,您可以在变量中捕获 Vue 并直接从 jQuery 事件调用该方法。

console.clear()

const app = new Vue({
el: '#events',
methods: {
logData(id) {
console.log(id); // never fires
},
},
});

$('.logMe').on('click', function(){
app.logData($(this).data("logId"))
});
<script src="https://unpkg.com/vue@2.4.2"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="logMe" data-log-id="10">Something</div>
<div id="events"></div>

关于javascript - 单击事件时从 jquery 触发 vue 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com