vue自定义插件结合iframe封装组件及函数实现弹窗预览文件功能

在这里插入图片描述

1、文件预览弹窗组件
<template>
  <!-- 公司组件库的弹窗组件,和element的弹窗组件用法一样 -->
  <sc-tf-dialog-base
    ref="scTfDialog"
    class="prod-dialog"
    :cancelBtnText="'关闭'"
    dialog-name="文件预览"
    :fullscreen="magnify"
    :height="magnify ? '90vh' : '550px'"
    :show-confirm-button="false"
    @beforeClose="closeDialog"
  >
    <template #title>
      <div class="file-title">
        <div>文件预览</div>
        <div>
          <sp-icon
            :type="magnify ? 'restore' : 'magnify'"
            color="#8998AC"
            style="margin-right: 10px"
            @click.native="magnify = !magnify"
            fontSize="25"
          ></sp-icon>
        </div>
      </div>
    </template>
    <!-- iframe嵌入预览文件的网页 -->
    <iframe class="prism-player" :src="origin + url" width="100%" height="100%"></iframe>
  </sc-tf-dialog-base>
</template>
<script>
export default {
  data() {
    return {
      magnify: false
    }
  },
  props: {
    config: {
      type: Object,
      default: () => ({})
    },
    // 接收传入的文件地址
    url: {
      type: String,
      default: ''
    },
    // 这里我们项目提供了一个接口传入文件的url后会通过nginx代理到另一个预览的组件中,能提供功能更为全面的预览功能(业务需求,可以忽略,直接将文件url传入iframe也能实现基础的预览功能)
    origin: {
      type: String,
      default:
        process.env.NODE_ENV === 'development'
          ? `${process.env.VUE_APP_PREVIWE_URL}/onlinePreview?url=`
          : `http://${window.location.hostname}:${process.env.VUE_APP_PREVIWE_URLNEW}/onlinePreview?url=`
    },
    // 接收关闭弹窗的方法
    close: {
      type: Function
    }
  },
  components: {},
  created() {
    this.$nextTick(() => {
      console.log(this.url)
      this.$refs['scTfDialog'].showDialog()
    })
  },
  methods: {
    //关闭弹窗
    closeDialog() {
      if (this.close) {
        this.close()
      }
    }
  }
}
</script>
<style lang="stylus" scoped>
// 省略样式代码
</style>
2、自定义vue插件挂载调用文件预览功能的方法
// 引入弹窗组件
import filePreviewPopup from './FilePreviewPopup.vue'
import { Base64 } from 'js-base64'
import Vue from 'vue'
// 将组件添加到dom中以实现打开弹窗的效果
const handleVedioBox = (url) => {
  // 注册组件
  const FileViewerConstructor = Vue.extend(filePreviewPopup)
  const instance = new FileViewerConstructor({
    url: url
  })
  // Base64加密传入弹窗组件的url(由于业务需求需要将文件url作为参数传入另一个链接地址中,所以这里需要加密一下)
  instance.url = encodeURIComponent(Base64.encode(url))
  // 将组件添加到dom中--打开弹窗
  document.body.appendChild(instance.$mount().$el)
  // 定义关闭弹窗的方法
  instance.close = () => {
    document.body.removeChild(instance.$mount().$el)
  }
}
// 定义插件的install方法(入口函数),在Vue.use()后会进入该文件自动执行install方法
const install = function (Vue) {
  // 挂载函数
  Vue.prototype.$filePreviewPopup = handleVedioBox
}
export default { install }

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 使用Vue可以通过自定义组件实现弹窗效果,首先需要在组件中添加一个boolean属性用于控制组件的显示和隐藏,然后在模板中添加一个条件渲染,当boolean属性的值为true时,就会显示弹窗,当boolean属性的值为false时,就会隐藏弹窗。另外,还可以使用transition组件实现弹窗的动画效果。 ### 回答2: 在Vue中,我们可以使用自定义组件实现弹窗效果。具体的步骤如下: 1. 创建弹窗组件: 首先,我们需要创建一个弹窗组件,可以命名为"Dialog"。在这个组件的模板中,可以包含弹窗的标题、内容和关闭按钮等元素。 2. 在需要使用弹窗的页面中引入组件: 在需要使用弹窗的页面中,可以通过`import`语句引入刚刚创建的弹窗组件。 3. 在页面中使用弹窗组件: 在需要触发弹窗的地方,可以使用`<Dialog>`标签来引入弹窗组件。并且可以通过传递参数的方式来设置弹窗的标题和内容等。 4. 组件交互: 弹窗组件可以通过`props`来接收传递的参数,并在模板中进行动态数据绑定,以展示弹窗的标题和内容等信息。 5. 显示/隐藏弹窗: 可以在`Dialog`组件中使用`v-if`或者`v-show`来控制弹窗的显示和隐藏。可以绑定一个数据属性,来判断弹窗是否显示。 6. 关闭弹窗: 可以在`Dialog`组件的模板中添加一个关闭按钮,并使用`@click`来监听关闭事件。在事件中,可以修改绑定的数据属性,以隐藏弹窗。 通过上述的步骤,我们可以在Vue中使用自定义组件实现弹窗效果。这种方法可以使弹窗的代码独立封装,具有复用性,同时也可以实现弹窗自定义样式和交互效果。 ### 回答3: 在Vue中,可以使用自定义组件实现弹窗效果。下面是实现弹窗效果的步骤: 1. 创建一个自定义弹窗组件,例如`Popup.vue`。在这个组件中,可以使用`<slot></slot>`插槽来展示弹窗的内容。 ```vue <template> <div class="popup"> <slot></slot> </div> </template> ``` 2. 在需要弹窗组件中引入并使用这个自定义组件。例如,在`App.vue`中,假设有一个按钮用于触发弹窗: ```vue <template> <div class="app"> <button @click="showPopup">打开弹窗</button> <popup v-if="isShowPopup"> <!-- 弹窗内容 --> <p>这是一个弹窗</p> <button @click="closePopup">关闭弹窗</button> </popup> </div> </template> <script> import Popup from './Popup.vue'; export default { components: { Popup }, data() { return { isShowPopup: false }; }, methods: { showPopup() { this.isShowPopup = true; }, closePopup() { this.isShowPopup = false; } } } </script> ``` 3. 使用`v-if`指令来控制弹窗的显示和隐藏。在上述例子中,点击按钮时,会通过`showPopup`方法将`isShowPopup`设置为`true`,从而显示弹窗。点击弹窗中的关闭按钮时,会通过`closePopup`方法将`isShowPopup`设置为`false`,从而隐藏弹窗。 通过以上步骤,就可以使用自定义组件实现弹窗效果了。当点击按钮时,弹窗会在页面中显示,并且可以包含自定义的内容。当关闭按钮被点击时,弹窗会隐藏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieChan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值