vue2 dialog整体作为子组件时 每次打开都重新执行生命周期

前言:将dialog整体作为 子组件时,每次打开都重新执行created、methods生命周期

子组件代码:

template>
  <el-dialog :title="title" width="1180px" :visible.sync="isDialogVisible" :close-on-click-modal="false" :show-close="false" top="4vh" append-to-body>
		<div>内容</div>
	    <div slot="footer" class="dialog-footer">
        <el-button @click="closeDialog" :size="size">取 消</el-button>
        <el-button type="primary" @click="handleSubmitPersonnel">确 定</el-button>
    </div>
    </el-dialog>
</template>

//js
 props: {
   isDialogVisible: {
      type: Boolean
    },
 },
 methods: {
	 closeDialog () {
     	 this.$emit('handleVisibleDialog', false)
   	 },
   	   // 获取提交   业务相关 可无视
    handleSubmitPersonnel: function () {
      this.$emit('handleSubmitPersonnel', { ...this.checkUserInfo })
    },
 }

父组件代码:


<template> 
<div>
 <Select-Personnel-Config-Dialog v-if="isDialogVisible" :isDialogVisible="isDialogVisible" @handleVisibleDialog="handleVisibleDialog" :dialogConfig="dialogConfig"></Select-Personnel-Config-Dialog>
</div>
</template> 
<script>
import SelectPersonnelConfigDialog from '../components/SelectPersonnelConfigDialog.vue'
export default {
  components: {
    SelectPersonnelConfigDialog
  },
  data () {
    return {
      input: '',
      size: 'small',
      dialogConfig: {
        deptCode: '00074201101'
      },
      isDialogVisible: false
    }
  },
  created () {},
  methods: {
  //触发事件
    inputClick () {
      this.handleVisibleDialog(true)
    },
    //控制显隐
    handleVisibleDialog (v) {
      this.isDialogVisible = v
    },
      // 获取子组件的提交内容
    handleSubmitPersonnel: function (data) {
      console.log(data)
	}
  }
}
</script>

关键点 通过isDialogVisible参数与父子组件通讯显隐, 再利用 v-if 控制元素销毁
这种把dialog作为一个整体写成子组件时需要关闭 dialog的右上角×关闭按钮 :show-close=“false”
因为子组件 @closeDialog 事件手动修改了 isDialogVisible 状态,而右上角的×按钮 并未触发此事件
所以下次打开时 isDialogVisible 未修改导致dialog未显示

解决办法是 利用 dialog的属性 before-close 关闭前回调 修改状态(业务不需要所以未尝试 ,理论上可行)

猜你喜欢

转载自blog.csdn.net/Yoga99/article/details/127925382
今日推荐