封装element UI中的dialog组件
初入职场的我在最近开发项目时遇到了一个问题,当把一个
el-dialog
封装为一个单独的组件来使用时,dialog的打开和关闭不能够正常进行执行,出于解决该问题的目的,我查阅了一些blog和资料,这里列出的是一些主要参考blog和资料:
这里废话不多说,直接上Demo代码…
父组件:
<template>
<div id="app">
<el-button @click="openDialog">
open dialog
</el-button>
<MyDialog :dialog-show.sync="dialogShow" />
</div>
</template>
<script>
export default {
name: 'App',
components: {
MyDialog: () => import('./components/dialog')
},
data() {
return {
// 这里是父组件所需要的data,同时也是父组件向子组件传递的data
dialogShow: false
}
},
methods: {
// 这里来响应父组件按钮的click事件
openDialog() {
this.dialogShow = true
}
}
}
</script>
子组件:
<template>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
@close="$emit('update:dialogShow', false)"
>
<div class="dialog-body">
<span>这是一段信息</span>
</div>
<span
slot="footer"
class="dialog-footer"
>
<el-button @click="handleClose">取消</el-button>
<el-button
type="primary"
@click="handleConfirm"
>确定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: 'MyDialog',
// 这里用props来接受父组件传递过来的data(dialogShow)
// 这里详细可以参考Vue.js官网提供的文档
props: {
dialogShow: {
// 这里需要验证一下dialogShow是不是Boolean类型,同时可以为其设置一个默认值
type: Boolean,
default: false
}
},
data() {
return {
// 子组件数据
dialogVisible: false
}
},
watch: {
// 用于监听dialogShow
dialogShow() {
// 将父组件传递过来的dialogShow赋值给dialogVisible
this.dialogVisible = this.dialogShow
}
},
methods: {
// 这里是点击确定的事件处理
handleConfirm() {
this.handleClose()
},
// 关闭dialog的事件处理
handleClose() {
this.$emit('update:dialogShow', false)
this.dialogVisible = false
}
}
}
</script>
这里再说一下
vue
中props
:
简单来讲就是:
父组件向子组件传递值就用props
子组件向父组件传值就用event
, 即this.$emit()