javascript - 组件无法从 Vue 实例调用方法 v-on:click
问题描述
我对 Vuejs 很陌生,我只想从我的 Vue 实例中调用一个方法,但似乎这是一个问题,我不知道为什么。
Vue 实例:
var monster = new Vue({
el: '#monsterlist',
data: {
monsters: undefined
},
created: async function (){
this.monsters = await this.loadMonster()
},
methods: {
loadMonster: async function () {
//stuff
},
deleteMonster: async function(id){
//stuff
}
}
})
零件:
Vue.component('monster', {
template: '<div class="content overlayable"> <div class="overlay" v-if="monster.deleting"><div class="lds-ripple"><div></div><div></div></div></div> <div><h1>{{monster.name}}</h1> <div class="static"> <div class="des"><img v-if="monster.image != undefined && monster.image != ``" :src="monster.image"> <a v-else>No monster image</a></div> <button class="denyBtn" v-on:click="deleteMonster(monster._id)">Delete</button> </div></div> </div>',
props: ['monster']
})
我想用我的怪物的 id 调用 deleteMonster() 方法,并在组件中声明一个按钮。
这是我得到的错误:
vue@2:6 ReferenceError: deleteMonster is not defined
at click (eval at Ya (vue@2:6), <anonymous>:3:451)
at He (vue@2:6)
at HTMLButtonElement.n (vue@2:6)
at HTMLButtonElement.Yr.o._wrapper (vue@2:6)
解决方案
您需要向emit
父组件发送一个事件,该事件monsterlist
调用其deleteMonster
传递自定义的函数id
,如下所示:
const monster = Vue.component('monster', {
template: '#monster',
props: ['monster']
})
new Vue({
el: '#monsterlist',
components: { monster },
data: {
monsters: undefined
},
created: async function (){
this.monsters = await this.loadMonster()
},
methods: {
loadMonster: async function () {
return [
{_id:1},
{_id:2},
];
},
deleteMonster: async function(id){
console.log(id);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="monsterlist">
<monster
v-for="(monster,index) in monsters"
:key="index"
:monster="monster"
@delete="deleteMonster"
/>
</div>
<template id="monster">
<div class="content overlayable">
<div class="overlay" v-if="monster.deleting">
<div class="lds-ripple">
<div></div>
<div></div>
</div>
</div>
<div>
<h1>{{monster.name}}</h1>
<div class="static">
<div class="des">
<img v-if="monster.image != undefined && monster.image != ``" :src="monster.image">
<a v-else>No monster image</a>
</div>
<button
class="denyBtn"
v-on:click="$emit('delete',monster._id)"
>Delete</button>
</div>
</div>
</div>
</template>
推荐阅读
- python - Tkinter Key Bind 和 Entry 重叠
- specflow - 如何使用编程忽略规范流测试
- .net-core - .Net Core 3.1 自包含应用程序可以在 Windows 2008 上运行吗?
- web-config - Blazor - 如何使用 brotli 压缩
- amazon-web-services - 从 AWS ECS Fargate 访问 AWS RDS 的最佳方式
- ansible - regex_replace 由 jinja 模板中的 var 内容替换
- html - 当按钮被禁用时,在提交按钮前添加加载图标
- oracle - 无法通过 PL/SQL 将数据插入数据库
- c++ - 在单独的线程 QT C++ 上截取小部件的屏幕截图
- r - 如何在闪亮的多个模块和应用程序中更新进度条?