vue.js - 从父 vue 组件上的按钮调用子方法
问题描述
我想从父组件的 img 标签调用 postDetails 的 toggleDetails 方法,我似乎不明白如何让它工作。
家长:
<div v-for="post in loggedInUser.posts" :key="post._id">
<postDetails :post="post"></postDetails>
<img @click.prevent="toggleDetails" class="grid-item" :src="post.imgUrl" />
</div>
</div>
孩子:
<template>
<section v-if="this.isDetailsOpen">
{{this.post.desc}}
</section>
</template>
<script>
export default {
props: {
post: Object,
},
data() {
return {
isDetailsOpen: false
};
},
methods: {
toggleDetails() {
this.isDetailsOpen = !this.isDetailsOpen;
}
}
}
</script>
解决方案
如果您只想将事件从父级发送到子级,则可以执行以下操作:
父组件:
<postDetails
ref="post"
:post="post"
></postDetails>
<img
@click.prevent="toggleDetails()"
class="grid-item"
:src="post.imgUrl"
/>
methods: {
toggleDetails () {
this.$refs.post.toggleDetails()
}
}
子组件:
methods: {
toggleDetails () {
this.isDetailsOpen = !this.isDetailsOpen
}
}
但是为了能够在任何组件之间发送事件,您必须创建一个 eventBus (eventHub)。
推荐阅读
- cloudflare - cloudflare 的 url 匹配如何在速率限制规则中工作
- html - 使用按钮 OnClick 角度编辑标题
- javascript - 带有大视图框的 SVG 没有出现在带有 react-native-svg 的移动设备上
- java - 如何在我的 Android pdf 阅读器应用中实现搜索功能?
- python - Python 3.8 DLL 问题 - ImportError: DLL load failed while importing _libprojectApiPy38_64: The specified module could not be found
- xml - XQuery 中是否有类似于 SQL 中的 LIMIT x, y 的东西?
- html - 如何定义模板以重用 HTML/CSS 中的 SVG 图形按钮?
- ios - 通过 Appium 在真实 iPhone 的 WKWebView 上运行 XCUITest 是否需要任何特殊配置?
- javascript - 监听事件中的特定数据属性
- android - 从 PreferenceScreen 导航到另一个 Fragment