vue3,实现一个ueditor+vue-ueditor-wrap实现富文本编辑组件,值双向绑定,一个页面可以加载多个组件,文件使用formdata+.net core接口进行上传
时间: 2025-06-27 09:00:38 浏览: 11
<<
要实现一个基于 Vue3 和 ueditor(百度富文本编辑器)结合 `vue-ueditor-wrap` 插件的富文本编辑组件,并支持值的双向绑定、允许多个实例共存以及使用 FormData + .NET Core 接口进行文件上传,可以按照以下步骤操作:
---
### **1. 安装依赖**
首先确保安装了必要的库和插件:
```bash
npm install vue-ueditor-wrap
```
如果需要引入 `.Net Core API` 进行文件上传,请确认服务器端已配置好文件接收接口。
---
### **2. 创建封装组件**
#### (1)定义基础组件结构
创建一个新的 Vue 组件,例如 `UEditor.vue` 文件:
```vue
<template>
<div class="ue-container">
<vue-ueditor-wrap
v-model="content"
:config="editorConfig"
@ready="onEditorReady"
/>
</div>
</template>
<script>
import VueUeditorWrap from "vue-ueditor-wrap";
export default {
name: "RichTextEditor",
components: { VueUeditorWrap },
props: {
modelValue: String // 双向绑定数据来源
},
data() {
return {
content: this.modelValue || "", // 初始化内容
editorConfig: {
initialFrameWidth: null,
initialFrameHeight: 350,
toolbars: [
["bold", "italic", "underline", "forecolor", "insertimage"]
],
serverUrl: "/api/upload", // 后台上传地址 (示例)
filePickList: false, // 是否开启图片回显功能
}
};
},
watch: {
modelValue(newVal) {
if (newVal !== this.content) {
this.content = newVal; // 更新内部状态
}
},
content(newContent) {
this.$emit("update:modelValue", newContent); // 触发父级更新
}
},
methods: {
onEditorReady(editorInstance) {
console.log("编辑器初始化完成:", editorInstance);
}
}
};
</script>
<style scoped>
.ue-container {
margin-bottom: 20px;
}
</style>
```
#### (2)说明关键点
- 使用 `v-model` 实现父子组件间的双向绑定。
- 配置项中设置 `serverUrl` 来指定上传接口路径。
- 在 `watch` 中监听外部传入的内容变化并同步到本地变量 `content`。
- 当编辑框内容发生变化时通过 `$emit('update:modelValue')` 将新内容通知给父级。
---
### **3. 处理文件上传逻辑**
在上述代码中的 `serverUrl`, 即 `/api/upload` 应该指向您的后端服务。以下是简单的 .NET Core 控制器样例用于处理文件上传请求:
#### 示例控制器代码 (.NET Core):
```csharp
[ApiController]
public class FileController : ControllerBase
{
[HttpPost("/api/upload")]
public async Task<IActionResult> UploadFile(IFormCollection form)
{
var files = Request.Form.Files;
foreach (var file in files)
{
if (file.Length > 0)
{
string filePath = Path.Combine(Directory.GetCurrentDirectory(), "uploads", file.FileName);
using FileStream fs = System.IO.File.Create(filePath);
await file.CopyToAsync(fs);
fs.Close();
}
}
return Ok(new { message = "上传成功" });
}
}
```
此方法会将接收到的所有文件保存至项目目录下的 `uploads/` 文件夹内。
---
### **4. 页面调用多个 UEditor 编辑器**
在一个页面上加载多个富文本编辑器只需要动态传递不同的模型即可:
```vue
<template>
<div>
<!-- 第一编辑器 -->
<rich-text-editor v-model="richText1"></rich-text-editor>
<!-- 第二编辑器 -->
<rich-text-editor v-model="richText2"></rich-text-editor>
{{ richText1 }}
{{ richText2 }}
</div>
</template>
<script>
import RichTextEditor from "./components/UEditor.vue";
export default {
components: { RichTextEditor },
data() {
return {
richText1: "<p>这是第一个编辑器默认值。</p>",
richText2: "<p>这是第二个编辑器默认值。</p>"
};
}
};
</script>
```
以上示例展示了如何在同一页面添加两个独立运作的 UE 编辑器。
---
**注意**: 如果遇到跨域问题,请记得为 ASP.NET Core 添加 CORS 支持并在前端检查是否正确设置了 Content-Type。
---
阅读全文
相关推荐


















