javascript - Vue:将点击事件绑定到一个组件,将值发送到另一个
问题描述
我有一个父组件和两个子组件。第一个孩子是产品卡片,第二个孩子是模式窗口。我想点击卡片将真实值发送到模态并显示它。这是我的 App.vue 组件中的模板:
<template>
<div id="app">
<div class="region" v-for="region in regions" :key="region">
<h2 v-text="region"></h2>
<div class="deputates">
<deputy
class="deputy"
v-for="deputy in deputates_in_regions(region)"
:key="deputy.id"
:deputy="deputy"
@click="open_modal"
></deputy>
</div>
</div>
<modal
class="modal"
v-for="deputy in deputates"
:key="deputy.id"
:deputy="deputy"
:modal_open="modal_open"
></modal>
</div>
</template>
open_modal 默认为 false:
export default {
name: "app",
data () {
return {
modal_open: false
我想让它成为现实:
open_modal() {
this.modal_open = true
}
在组件中接收它:
export default {
name: "modal",
props: {
deputy: Object,
modal_open: {
type: Boolean,
required: true
}
}
并显示一个模态窗口:
<template>
<div class="modal" v-show="modal_open">
<p>{{ deputy.modal }}</p>
</div>
</template>
但是我的代码不起作用。
解决方案
您的代码看起来您的目标是同时显示多个模式。这通常不是你想要的。
在这种情况下,我通常会这样做:
export default {
name: "app",
data () {
return {
modal_open: false,
modal_deputy: null,
}
}
在方法中:
open_modal(deputy) {
this.modal_open = true;
this.modal_deputy = deputy
}
模态调用:
<deputy
class="deputy"
v-for="deputy in deputates_in_regions(region)"
:key="deputy.id"
:deputy="deputy"
@click="open_modal(debuty)"
></deputy>
<modal
class="modal"
:key="deputy.id"
:deputy="modal_deputy"
v-if="modal_open"
></modal>
模态本身根本不需要处理显示,父级可以使用 v-if 处理。
<template>
<div class="modal">
<p>{{ deputy.whateverYouWantToShow }}</p>
</div>
</template>
查看工作代码沙箱:https ://codesandbox.io/s/2019-11-11deputates-z125f?from-embed
注意@click-handler 上的 .native 修饰符和 :key="modal_deputy.id" 而不是 :key="deputy.id"。
推荐阅读
- python - Numpy Rebin 2 列数据集
- bash - Bash 命令使用意义
- drools - Drools 检查列表中的一个属性是否存在于另一个列表中
- sed - 如果保持空间为空,sed 是否有一种简单的方法来“h”,如果不为空,是否有“H”?
- javascript - 通过单击带有javascript的文本来复制表格元素的文本
- javascript - D3js v4 条形图中的有限水平刻度
- javascript - 如何为 jupyterlab 扩展定义图标?
- angular - 未绑定断点 - VS Code | 铬 | 角
- amazon-web-services - 更改 Redshift 表的所有权会引发“必须是超级用户才能更改所有者”
- java - 老Tomcat - Java - Ant 项目恢复