vue.js - 如何使用道具 vuejs 在子组件中打开和关闭模式?
问题描述
我目前有以下子组件
<Edit
@fetchInfo="fetchInfo"
:agencyData="agency"
:dialogEdit.sync="dialogEdit"
></Edit>
其中基本上包含一个模态
最初它是错误的,以免显示模态:
data(){
return {
dialogEdit: false
}
}
通过我做的方法:
open(){
this.dialogEdit = true;
}
在我的<Edit></Edit>
组件中,我有:
<el-dialog title="Editar" :visible.sync="dialogEdit" width="60%">
</el-dialog>
并收到道具:
props: ["dialogEdit"],
但是当从子组件关闭模式时,我收到一个错误
[Vue 警告]:避免直接改变 prop,因为每当父组件重新渲染时,该值都会被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“dialogEdit”
解决方案
首先,显然您正在使用 Element UI。
但是,正如错误所暗示的,您正在dialogEdit
直接修改。当通过单击关闭元素 ui 模式时X
,dialogEdit
变为false
。您可以使用计算属性来解决这个问题,例如在这个答案中建议的那样。
由于您使用的是 Element UI,因此您还有另一种解决此问题的可能性。该对话框具有在before-close
模式关闭之前触发的事件。dialogEdit
在那里,您可以向父级发出新的布尔值。所以保留:dialogEdit.sync="dialogEdit"
in 子标签并将其添加before-close
到对话框和要处理的函数中,您可以在其中发出新false
值:
<el-dialog title="Editar" :before-close="handleClose" ....>
JS:
methods: {
handleClose() {
this.$emit('update:dialogEdit', false);
}
},
如果你的模态中有一些按钮来关闭模态,你可以在那里添加相同的功能:
<el-button type="primary" @click="handleClose">Close</el-button>
推荐阅读
- javascript - 在网页上,所有文本框都有相同的 ID,我想通过 Chrome 控制台中的 JavaScript 在所有框中写入相同的文本
- c# - 如果嵌套数组应具有不同的 json 元素,如何使用 C#(.net Core)将嵌套的 Json 存储到 MongoDB
- javascript - 排序最新日期时间
- python - 熊猫日期时间排序自动删除时间戳
- python - 将余弦平方拟合到python中的点
- angular - CDK 无限滚动结束检查
- android - 我在哪里可以找到 AAR 中的 Proguard 规则?
- android - SQLite、MongoDB 和 React-Native 的组合可能吗?
- ruby - col 如何在 Ruby 代码中获取其值:Array.new(cells) { |col| PolarCell.new(行,列)}
- visual-studio-code - Visual Studio Code 等待和弦的第二个键。(Ctrl + A)