巨好用,vue全局弹窗组件,通过js调用并传参

弹窗组件,此处以element为实例,需自行修改

//dialog.vue
<template>
  <el-dialog
    :title="title"
    :visible.sync="dialogVisible"
    width="30%">
    <span>{{content}}</span>
    <template #footer>
          <span class="dialog-footer">
            <el-button @click="cancel">取消</el-button>
            <el-button type="primary" @click="confirm">确定</el-button>
          </span>
    </template>
  </el-dialog>
</template>
<script >
export default {
  data () {
    return {
      dialogVisible: false,
      title: '',
      content: '',
      cancelFn() {

      },
      confirmFn() {

      }
    }
  },
  methods: {
    show(e){
      this.title = e.title
      this.content = e.content
      this.cancelFn = e.cancel
      this.confirmFn = e.confirm
      this.dialogVisible = true
    },
    hide(){
      this.dialogVisible = false
    },
    cancel () {
      this.cancelFn()
    },
    confirm () {
      this.confirmFn()
    }
  }
}
</script>

js工具

//dialog.js
import Vue from 'vue'
//组件路径
import dialog from '@/components/dialog.vue';

// 创建Dialog实例
const dialogConstructor = Vue.extend(dialog );
const dialogInstance = new dialogConstructor({
  el: document.createElement('div')
});

// 将dialog元素添加到body
document.body.appendChild(dialogInstance.$el);

// 在Vue原型上添加显示和隐藏Dialog的方法
Vue.prototype.$showDialog = dialogInstance.show;
Vue.prototype.$hideDialog = dialogInstance.hide;

main.js全局引入

//dialog.js路径
import '@/utils/dialog'

使用

login(){
    this.$showDialog({
        title: '信息',
        content: '登录成功!',
        confirm () {
            console.log('confirm')
            this.$hideDialog()
        },
        cancel () {
            console.log('cancel')
            this.$hideDialog()
        }
    })
}

效果

### 在Vue2中使用uView Popup组件传递参数Vue2 中利用 `uView` 的 `Popup` 组件时,可以通过多种方式来实现向弹窗内部传递参数的功能。一种常见的方式是通过父级作用域内的事件或者属性绑定来进行通信。 对于想要从外部传入的数据,可以考虑如下方法: #### 使用 Props 传递数据 可以在打开弹层之前设置好需要传输的信息作为 props 属性的一部分,在调用 `<u-popup>` 标签的时候把这些 prop 值赋予它。例如: ```html <template> <!-- 其他代码 --> <u-button type="primary" @click="showPopup">显示弹框</u-button> <u-popup v-model="visible" mode="center"> <div class="popup-content">{{ message }}</div> <!-- 显示来自父组件的消息 --> </u-popup> </template> <script> export default { data() { return { visible: false, message: '' }; }, methods: { showPopup() { this.message = '这是要展示的内容'; // 设置消息内容 this.visible = true; } } }; </script> ``` 上述例子展示了如何创建一个按钮用于触发弹出窗口,且设置了 `message` 变量用来存储最终呈现给用户的文本信息[^1]。 #### 利用子组件的自定义事件反馈状态变化 如果希望获取到关闭后的回调或者其他交互行为的结果,则可以在子组件里发射相应的事件通知父组件更新某些逻辑或界面元素的状态。 为了使这个过程更加灵活可控,还可以借助于 Vuex 或者其他状态管理工具共享全局范围内的配置项或是异步加载所需资源等操作[^4]。 #### 动态改变 Popup 内部内容 除了直接指定静态文本外,也可以让 popup 接收更复杂的结构化对象甚至整个 HTML 片段作为其组成部分之一;这通常涉及到 slot 插槽机制的应用以及 JavaScript 对象之间的深拷贝处理等方面的知识点。 ```javascript // 父组件中准备待传递的对象 const itemData = { title: '商品名称', price: '$99' }; <u-popup v-model="isVisible"> <template #default="{ close }"> <product-detail :item="itemData" @close="close"></product-detail> </template> </u-popup> ``` 这里演示了一个场景——假设有一个名为 `ProductDetail` 的局部注册组件负责渲染具体的产品详情页视图,那么就可以把刚才提到的那个 `itemData` 实例作为一个完整的实体交给后者去解析和展现出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值