【前端vue2 + element ui】Dialog 对话框:.vue组件跳转
- 写在最前面
- 一、父组件调用
- 1、`<template>`
- 1.1 跳转位置
- 1.2 弹窗调用
- 2、`<script>`
- 2.1 import
- 2.2 export
- 2.3 methods
- 二、子组件调用
- 1、`<template>`
- 2、`<script>`
- 2.1 export
- 2.2 watch和methods并列
- 2.3 methods
写在最前面
背景:vue2 + element ui
子组件里面写Dialog 对话框,父组件直接调用
如果在子组件关闭了Dialog 对话框,那么:
①在子组件可见状态是false
②在父组件可见状态是true
会导致按<跳转按钮>无法跳出弹窗
所以需要:
①Dialog 对话框父组件、子组件双向绑定可见状态,才能控制可见状态的false
②Vue组件中的一个[watch
]属性,用于监视visible
属性的变化
一、父组件调用
1、<template>
1.1 跳转位置
<el-table-column prop="stnm" label="测站名称" sortable="custom">
<template slot-scope="scope">
<el-button type="text" @click="handleClickstnm(scope.row)">{{ scope.row.stnm }}</el-button>
</template>
</el-table-column>
1.2 弹窗调用
写到最后面
<!-- 跳转Dialog -->
<FlowMeasurement ref="childRef" :visible="createvisible" :type="type" :stnmdata="stnmdata"
@close="CloseMeasure" />
</div>
</template>
2、<script>
2.1 import
引用子组件
import FlowMeasurement from './FlowMeasurement.vue';
2.2 export
声明组件
export default {
components: {
FlowMeasurement
},
data中声明可见状态
data() {
return {
type: '',
createvisible: false,
stnmdata: {},
2.3 methods
methods: {
// 关闭弹窗
CloseMeasure() {
this.createvisible = false
},
// 点开弹窗
handleClickstnm(stnm) {
console.log(stnm)
this.createvisible = true
this.type = 'view'
this.stnmdata = stnm
},
//或者
handleClickstnm() {
console.log(this.createvisible)
this.createvisible = true
},
二、子组件调用
1、<template>
开局弹窗声明
<el-dialog title="测站信息新增" :visible.sync="createvisible" width="80%" @close="CloseMeasure" demo-form>
2、<script>
2.1 export
新声明name,然后传值。
需要确认一下,props传值是visible(后面watch函数监听的变量)
export default {
name: 'FlowMeasurement',
props: {
visible: {
type: Boolean,
default: false
},
type: {
type: String,
default: ''
}
},
2.2 watch和methods并列
这段代码是Vue组件中的一个[watch
]属性,用于监视visible
属性的变化。每当visible
属性的值发生变化时,这个监视器(watcher)就会被触发,并执行相应的函数。
具体来说,这个函数做的事情是:
- 监视
visible
属性的值。 - 当
visible
的值发生变化时(无论是从true
变为false
,还是从false
变为true
),将这个新的值赋给[createvisible
]属性。
这样做的目的通常是为了同步两个属性的值,使得[createvisible
]的值总是跟visible
保持一致。这在Vue组件中是一种常见的模式,用于在组件内部响应外部传入的props变化。
watch: {
visible(val) {
this.createvisible = val;
}
},
2.3 methods
this.$emit('close')
很重要,否则会关闭后再次点击打不开了。
因为关闭后显示状态为true,但是没有显示
显示状态和bool冲突
methods: {
// 右上角关闭按钮
CloseMeasure() {
this.createvisible = false
this.$emit('close')
},
CloseSuccess
欢迎大家添加好友交流。