美文网首页
el-dialog操作实例的写法

el-dialog操作实例的写法

作者: 明天_8c66 | 来源:发表于2022-03-21 17:34 被阅读0次
封装js (popup.js)
import Vue from 'vue'
import store from '@/store'
import router from '@/router'

const createPortal = (com, props) => {
  return new Promise((resolve, reject) => {
    const Ctr = Vue.extend(com)
    const instance = new Ctr({
      router,
      propsData: {
        ...props
      },
      beforeCreate() {
        this.$store = store
      },
      created() {
        this.$once('sure', (...arg) => {
          this.$destroy()
          resolve(...arg)
        })
        this.$once('close', (...arg) => {
          this.$destroy()
          reject(...arg)
        })
      },
      beforeDestroy() {
        this.visible = false
        this.$off('sure')
        this.$off('on')
        document.body.removeChild(this.$el)
      }
    })
    instance.$mount()
    document.body.appendChild(instance.$el)
  })
}

export default createPortal

组件内使用
showDialog() {
      // this.$popup 为 main.js引入挂在到 Vue原型的方法
      this.$popup(AddDialog, { name: '王五', age: '18' }).then((res) => { // 第一个参数为组件名,第二个参数为传入组件的props<Object>
        console.log(res, 'suresure') // this.$emit('sure') 进入的回调 一半用来调用刷新页面的接口
      }).catch((err) => {
        console.log('cancelcancel', err) // this.$emit('close') 的回调
      })
    },
弹窗组件
<template>
  <el-dialog
    :visible.sync="dialogVisible"
    title="testDialog"
    width="50%"
  >
    <div>
      {{ name }} -- {{ age }}
      <el-button type="primary" @click="confirm">确认</el-button>
      <el-button @click="cancel">取消</el-button>
    </div>
  </el-dialog>
</template>

<script>
export default {
  name: '',
  components: {},
  props: {
    name: {
      type: String,
      default: ''
    },
    age: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      dialogVisible:true
    }
  },
  created() {
    do...
  },
  methods: {
    confirm() {
      this.$emit('sure', { test: '666' }) // 第一个参数sure与close为封装的方法,所以固定名称,第二个参数可以回传给父组件
    },
    cancel() {
      this.$emit('close', { name: '1s' })
    }
  }
}
</script>

<style scoped>

</style>


相关文章

网友评论

      本文标题:el-dialog操作实例的写法

      本文链接:https://www.haomeiwen.com/subject/ouazlrtx.html