wangeditor上传图片并展示在输入框内方法(vue3)

 安装vue3组件

yarn add @wangeditor/editor-for-vue@next
# 或者 npm install @wangeditor/editor-for-vue@next --save

页面中创建一个新的组件 

<template>
    <div style="border: 1px solid #ccc; text-align: left">
        <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
        <Editor style="height: 500px; overflow-y: hidden" v-model="valueHtml" :defaultConfig="editorConfig" :maxLength="500"
            :mode="mode" @onCreated="handleCreated" />
    </div>
</template>

<script lang="ts" setup>
import "@wangeditor/editor/dist/css/style.css"; // 引入 css

import { onBeforeUnmount, ref, shallowRef, onMounted } from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";

// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();

// 内容 HTML
const valueHtml = ref("");
// 模拟 ajax 异步获取内容
onMounted(() => { });

const toolbarConfig = {};
const ImgUrl = ref<string>("");
const editorConfig = {
    placeholder: "请输入内容...",
    MENU_CONF: {
        uploadImage: {
            //上传图片配置
            server: import.meta.env.VITE_BASE_URL + "/common/file/upload", //上传接口地址
            fieldName: "file", //上传文件字段名
            methods: "post",
            // headers: {
            //     token: sessionStorage.getItem('XNZtoken'),
            // },
            // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
            allowedFileTypes: ["image/*"],
            // metaWithUrl: true, // 参数拼接到 url 上
            // 单个文件上传成功之后
            onSuccess(file: { name: any; }, res: { data: string; }, insertFn: any) {
                console.log(`${file.name} 上传成功`, res.data);
                ImgUrl.value = res.data;
            },
            // // 自定义插入图片
            customInsert(res: { data: any; }, insertFn: (arg0: any) => void) {
                insertFn(res.data); //插入图片
            },
        },
    },
};

// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
    const editor = editorRef.value;
    if (editor == null) return;
    editor.destroy();
});

const handleCreated = (editor: any) => {
    editorRef.value = editor; // 记录 editor 实例,重要!
};
defineExpose({
    valueHtml
});
</script>

<style lang="scss" scoped>
:deep(.text-editor) {
    .w-e-bar-item {
        text-align: left !important;

        &:nth-child(32) {
            display: none;
        }

        &:nth-child(21) {
            display: none;
        }

        &:nth-child(24) {
            display: none;
        }

        &:nth-child(22) {
            display: none;
        }

        &:nth-child(25) {
            display: none;
        }

        &:nth-child(26) {
            display: none;
        }
    }
}
</style>

如何使用

import noticeEdit from "./wangEdit.vue";

 <notice-edit ref="valueHtml">

const valueHtml = ref<any>(null)  //拿到valueHtml直接用就行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在Vue3中使用wangeditor并实现上传图片功能,需要进行以下步骤: 1. 安装wangeditor和axios ```shell npm install wangeditor axios --save ``` 2. 在组件中引入wangeditor和axios ```javascript import WangEditor from 'wangeditor' import axios from 'axios' ``` 3. 在组件的mounted钩子函数中初始化wangeditor ```javascript mounted() { const editor = new WangEditor('#editor') editor.config.uploadImgServer = '/upload' // 上传图片的接口地址 editor.config.uploadFileName = 'file' // 上传图片的文件名 editor.config.uploadImgHeaders = { // 上传图片时需要携带的请求头 Authorization: 'Bearer ' + localStorage.getItem('token') } editor.config.uploadImgHooks = { // 上传图片的回调函数 customInsert: function (insertImg, result, editor) { if (result.code === 200) { insertImg(result.data.url) } else { alert('上传失败') } } } editor.create() } ``` 4. 在组件中添加一个textarea元素,并将其id设置为editor ```html <template> <div> <textarea id="editor"></textarea> </div> </template> ``` 5. 在后端实现上传图片的接口,并将其地址填写到第3步中的uploadImgServer属性中 ```javascript const express = require('express') const multer = require('multer') const app = express() const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, Date.now() + '-' + file.originalname) } }) const upload = multer({ storage: storage }) app.post('/upload', upload.single('file'), (req, res) => { const file = req.file if (!file) { const error = new Error('Please upload a file') error.httpStatusCode = 400 return next(error) } res.send({ code: 200, data: { url: 'http://localhost:3000/' + file.path } }) }) app.listen(3000, () => { console.log('Server started on port 3000') }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值