vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue在线预览各类型文件

vue如何在线预览各类型文件

作者:如果会御剑

这篇文章主要介绍了vue如何在线预览各类型文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

此文章是在vue-admin-template后台上做的功能

1.新建组件previewFile => index.vue

<template>
  <div :class="['dialog-box',isCollapse?'analysis-dialog':'analysis']">
    <el-dialog
      :title="`${file.title}文件预览`"
      :visible.sync="file.dialogVisible"
      :before-close="handleClose"
      :width="isCollapse?'calc(100% - 54px)':'calc(100% - 238px)'"
      top="0"
    >
      <div>
        <iframe
          class="child"
          frameborder="0"
          :src="'http://view.xdocin.com/xdoc?_xdoc=' + file.fileurl"
          :style="{ height: height }"
        />
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
  props: {
    file: {
      type: Object,
      default: function() {
        return {
          fileurl: '',
          dialogVisible: false,
          title: ''
        }
      }
    }
  },
  data() {
    return {
      height: window.innerHeight - 120 + 'px',
      dialogVisible: false
    }
  },
    // 这里是用来判断左边菜单栏是否打开
  computed: {
    ...mapGetters(['sidebar']),
    isCollapse() {
      return !this.sidebar.opened
    }
  },
  methods: {
    handleClose() {
      this.file.dialogVisible = false
    }
  }
}
</script>
<style scoped>
.child {
  width: 100%;
  height: 100%;
  border: 0;
}
.dialog-box>>>.el-dialog__headerbtn{
  font-size: 34px;
}
.analysis>>>.el-dialog{
  left: 119px;
}
.analysis-dialog>>>.el-dialog{
  left: 27px;
}
</style>

上面用到vuex只是用来判断左边菜单栏是否打开,用来适配弹窗的宽度而已,如果不需要可以删除,不影响功能。

2.引用组件

<div>
    <div>
    <el-button
       size="mini"
       type="success"
        @click="handlepreview"
     >预览</el-button>
</div>
<!-- 预览文件 -->
    <preview-file :file="file" />
</div>
 
<script>
    export default {
        components: {
            PreviewFile: () => import('@/components/previewFile/index.vue')
      },
        data(){
            return{
                file: {
                    fileurl: '',
                    dialogVisible: false,
                    title: ''
                  }
            }
        },
        methods:{
             // 预览
    handlepreview() {
      // console.log(index, row)
        // 这里的id是传给后端接口的id,没有可以不传
      downtemplate({ id: row.id }).then(res => {
        this.file.fileurl = encodeURIComponent(res.data),//后端请求回来的文件地址url
        this.file.dialogVisible = true,//弹窗
        this.file.title = row.title,//文件名称
      })
    },
        }
    }
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文