全局弹框组件

// 全局弹框组件
import DialogPopup from '@/components/DialogCommon'
Vue.prototype.$dialogPopup = DialogPopup.install
import Vue from 'vue'
import store from '../../store'
import Dialog from '@/views/components/dialog'
let instance
let isExist
const DialogBox = Vue.extend(Dialog)
Dialog.install = (data) => {
  if (!data.dom) {
    console.log('内容缺失')
    return false
  }
  if (data.coexist) { // 尚持弹框是否保留
    isExist = new DialogBox({
      data,
      store
    }).$mount()
    document.body.appendChild(isExist.$el)
    // 挂载至页面(#app)
    Vue.nextTick(() => {
      isExist.visible = true
      // show 和弹窗组件里的show对应,用于控制显隐
    })
  } else {
    if (isExist) {
      isExist.visible = false
      document.body.removeChild(isExist.$el)
      isExist = null
    }
    if (instance) {
      instance.visible = false
      document.body.removeChild(instance.$el)
      instance = null
    } // 移除已有弹窗,确保只有一个弹窗显示
    instance = new DialogBox({
      data,
      store
    }).$mount()
    document.body.appendChild(instance.$el)
    // 挂载至页面(#mes

    Vue.nextTick(() => {
      instance.visible = true
      // visible 和弹窗组件里的show对应,用于控制显隐
    })
  }
}
/**
 * 简单的使用方式
 * this.$dialogPopup({
      title: '测试', // 标题的内容
      topBg: true, // 头部那个背景
      autoHeight: true, // body内部是否自动撑开
      dom: Test, // 组件是自己创建的
      width: '800px', // 弹框的宽度
      coexist: false, // 控制上一次弹窗是否保留,默认false
      option: {} 数据会传入自己的组件  通过props里定义option 组件里可以使用this.option 拿到
    })
  * 异步用法
    this.$dialogPopup({
      title: '测试',
      dom: Test,
      showFooter: true, // 展示脚部组件
      isSync: true, // 是否要异步关闭
      width: '800px',
      coexist: false, // 控制上一次弹窗是否保留,默认false
      option: data,
      ok: (success) => { // ok 回调的参数是一个函数 调用就可以在接口调用后关闭弹框
        setTimeout(() => {
          success()
        }, 5000)
      }
    })
  * 给内容绑定事件 让组件内的事件能推到组件调用里外头
    this.$dialogPopup({
      title: '测试',
      dom: Test,
      width: '800px',
      coexist: false, // 控制上一次弹窗是否保留,默认false
      option: data,
      events: 'content', // 给传递到组件的自定义内容组件绑定content 事件,组件内使用this.$emit('content', data)调用  多个请用数组
      content: (data) => { // 定义同名的函数对象其中可以拿到组件对外外传输的值
        // data 就是要传递的参数
      },
      clickContent: (data)=> {
        // 组件默认绑定了click事件 自定义内容组件内使用this.$emit('click', data)调用
      }
    })
  * 脚步自定义组件和异步情况下自定义组件的用法
    this.$dialogPopup({
      title: '测试',
      dom: Test,
      showFooter: true, // 展示脚部组件
      footerDom: TestFooter, // 自定义脚部组件
      footerEvents: 'footer', // 自定义脚部事件 多个请用数组
      footer: (data, success) => { // 需要定义同名的事件名称  success 是异步情况下第二个参数
        setTimeout(() => {
          success()
        }, 3000)
      },
      isSync: true, // 开启异步
      width: '800px',
      coexist: false, // 控制上一次弹窗是否保留,默认false
      option: data
    })
 */
export default Dialog

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Vue应用程序中实现全局框的控制,你可以使用Vue.js提供的全局事件总线(Event Bus)机制。 以下是一个简单的实现: 1.在Vue实例中创建一个事件总线: ``` // main.js import Vue from 'vue' export const EventBus = new Vue() ``` 2.在需要出框的组件中,通过事件总线触发一个事件: ``` // MyComponent.vue import { EventBus } from '@/main' methods: { showModal () { EventBus.$emit('show-modal') } } ``` 3.在包含出框的组件中,监听事件并控制出框的显示与隐藏: ``` // ModalComponent.vue import { EventBus } from '@/main' data () { return { showModal: false } }, created () { EventBus.$on('show-modal', () => { this.showModal = true }) }, methods: { closeModal () { this.showModal = false } } ``` 通过这种方式,你可以在任何组件中触发事件并控制全局出框的显示与隐藏。当然,你也可以通过传递参数来实现更复杂的逻辑。 ### 回答2: Vue全局框JS控制主要包括以下几个步骤: 第一步,导入Vue和第三方框插件,可以使用import语句导入。 第二步,创建一个Vue实例,用于管理全局框相关的数据和方法。 第三步,定义全局框的属性和方法,如框的显示状态、标题、内容、确认按钮、取消按钮等。 第四步,将全局框挂载到Vue实例上,并使用Vue的插件机制将该实例注册为全局组件。 第五步,使用组件的方式来调用全局框,可以直接在Vue实例中使用该组件,或者通过事件触发、计算属性、方法等方式来控制框的显示和隐藏。 第六步,根据实际需求,可以在全局框中添加一些自定义配置项,如框的宽度、高度、位置等。 第七步,封装全局框的方法,使其支持链式调用,方便在代码中使用。 第八步,对全局框的样式进行自定义,可以通过CSS样式文件或者内联样式灵活地修改框的样式。 总而言之,通过上述步骤,我们可以在Vue中实现全局框的JS控制,方便在整个项目中管理和调用组件,提高开发效率和代码复用性。 ### 回答3: Vue全局框JS控制是通过Vue.js的全局对象$emit和$on来实现的。为了实现统一的框控制,可以借助Vue的事件总线机制。 首先,在main.js中创建一个Vue实例,作为事件总线: ``` import Vue from 'vue' export const EventBus = new Vue() Vue.prototype.$bus = EventBus ``` 然后,在需要框的组件中,可以通过以下方式触发一个全局事件: ``` this.$bus.$emit('show-dialog', dialogData) ``` 其中,'show-dialog'是自定义的事件名称,dialogData是传递给框的数据。 接着,在根组件全局组件中监听该事件,并根据需求进行处理。可以通过以下方式在组件中监听事件: ``` this.$bus.$on('show-dialog', (dialogData) => { // 处理框逻辑,比如出一个全局组件,并将dialogData传递给它 }) ``` 在监听到事件后,在组件中进行相应的处理,比如将dialogData传递给全局组件,并出。 通过以上步骤,就可以实现Vue全局框的控制了。无论在哪个组件中需要框,只需要触发全局事件,然后在根组件全局组件中进行监听和处理,实现了框的统一控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值