Vue2 富文本编辑器wangEditor使用

1.单页面使用

<template>
  <div class="app-container">
    <el-row :gutter="10">
      <el-col>
        <div ref="editor" class="text" />
      </el-col>
      <!-- <el-col :xs="24" :sm="24" :md="9" :lg="9" :xl="9">
        <div v-html="editorContent" />
      </el-col> -->
    </el-row>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'
import { upload } from '@/utils/upload'
import E from 'wangeditor'
export default {
  name: 'Editor',
  data() {
    return {
      editor: null,
      editorContent:
        `
        <ul>
          <li>更多帮助请查看官方文档:<a style="color: #42b983" target="_blank" href="https://www.wangeditor.com/doc/">wangEditor</a></li>
        </ul>
        `
    }
  },
  computed: {
    ...mapGetters([
      'imagesUploadApi',
      'baseApi'
    ])
  },
  created(){
  },
  mounted() {
    this.createEditor(this.editorContent)
  },
  methods:{
    createEditor(val){
      var imagesUploadApi = this.imagesUploadApi //图片上传地址
      var baseApi = this.baseApi //ip+端口
      if(this.editor == null){
        this.editor = new E(this.$refs.editor)
        // 自定义菜单配置
        this.editor.config.zIndex = 5
        // 文件上传
        this.editor.config.customUploadImg = function(files, insert) {
          // files 是 input 中选中的文件列表
          // insert 是获取图片 url 后,插入到编辑器的方法
          files.forEach(image => {
            upload(imagesUploadApi, image).then(res => {
              const data = res.data
              const url = baseApi + '/file/' + data.type + '/' + data.realName
              insert(url)
            })
          })
        }
        this.editor.config.onchange = (html) => {
          this.editorContent = html
          this.$emit('childByValue', html)
        }
        this.editor.create()
      }
      this.editor.txt.html(val)
    },
  }
}
</script>

2.作为子组件,实现从父组件获取内容,回传内容到父组件

1.父组件

<template>
  <div class="app-container">
    {{ bodyInfo }}
		<Editor :bodyInfo="bodyInfo" @childByValue="getValue"/>    
  </div>
</template>

<script>
import Editor from '@/views/components/Editor'

export default {
  name: 'fuzujian',
  components: { Editor },
  data() {
    return {
      bodyInfo: ''
    }
  },
  methods: {
    getValue(v){
      this.bodyInfo = v
    }
  }
}
</script>

2.子组件

<template>
  <div class="app-container">
    <el-row :gutter="10">
      <el-col>
        <div ref="editor" class="text" />
      </el-col>
      <!-- <el-col :xs="24" :sm="24" :md="9" :lg="9" :xl="9">
        <div v-html="editorContent" />
      </el-col> -->
    </el-row>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'
import { upload } from '@/utils/upload'
import E from 'wangeditor'
export default {
  name: 'Editor',
  props: {
    bodyInfo: String
  },
  data() {
    return {
      editor: null,
      editorContent:
        `
        <ul>
          <li>更多帮助请查看官方文档:<a style="color: #42b983" target="_blank" href="https://www.wangeditor.com/doc/">wangEditor</a></li>
        </ul>
        `
    }
  },
  computed: {
    ...mapGetters([
      'imagesUploadApi',
      'baseApi'
    ])
  },
  watch:{
    bodyInfo:{
      handler(val){
        if(val == null){
          this.createEditor('')
        }else{
          this.createEditor(val)
        }
      }
    }
  },
  created(){
  },
  mounted() {
    this.createEditor(this.bodyInfo)
  },
  methods:{
    createEditor(val){
      var imagesUploadApi = this.imagesUploadApi
      var baseApi = this.baseApi
      if(this.editor == null){
        this.editor = new E(this.$refs.editor)
        // 自定义菜单配置
        this.editor.config.zIndex = 5
        // 文件上传
        this.editor.config.customUploadImg = function(files, insert) {
          // files 是 input 中选中的文件列表
          // insert 是获取图片 url 后,插入到编辑器的方法
          files.forEach(image => {
            upload(imagesUploadApi, image).then(res => {
              const data = res.data
              const url = baseApi + '/file/' + data.type + '/' + data.realName
              insert(url)
            })
          })
        }
        this.editor.config.onchange = (html) => {
          this.editorContent = html
          this.$emit('childByValue', html)
        }
        this.editor.create()
      }
      this.editor.txt.html(val)
    },
  }
}
</script>

<style scoped>
  .text {
    text-align:left;
  }
 ::v-deep .w-e-text-container {
    height: 420px !important;
  }
</style>

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值