最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中使用富文本編輯器的示例詳解

 更新時間:2023年10月20日 13:53:33   作者:會說法語的豬  
這篇文章主要為大家詳細介紹了Vue3中使用富文本編輯器的相關(guān)知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以參考一下

在vue3中我們可以使用@wangeditor/editor、@wangeditor/editor-for-vue來實現(xiàn)其功能

npm地址:https://www.npmjs.com/package/@wangeditor/editor-for-vue/v/5.1.12?activeTab=readme

官網(wǎng):Editor 

1. 安裝

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

2. 組件封裝

@/comps/Editor/index.vue 

首先為了能讓vue認識@wangeditor/editor-for-vue庫、我們可以在.d.ts中聲明一下即可

// 聲明外部 npm 插件模塊
declare module '@wangeditor/editor-for-vue';
<template>
  <div class="Wft-Editor flex flex-col">
    <Toolbar
      class="default-border"
      :editor="editorRef"
      :mode="mode"
    />
    <Editor
      class="flex-1 overflow-y-auto"
      v-model="valueHtml"
      :defaultConfig="editorConfig"
      :mode="mode"
      @onCreated="handleCreated"
      @onChange="onChange"
    />
  </div>
</template>
<script setup lang="ts">
import '@wangeditor/editor/dist/css/style.css'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import type { IDomEditor } from '@wangeditor/editor'
import { onBeforeUnmount, shallowRef, computed, watch } from 'vue'
 
type TProps = {
  mode?: string,
  valueHtml?: string,
  placeholder?: string,
  disable?: boolean
}
const props = withDefaults(defineProps<TProps>(), {
  mode: 'default', // or 'simple'
  valueHtml: '',
  placeholder: '請輸入內(nèi)容...',
  disable: false
})
type TEmits = {
  (e: 'update:valueHtml', params: string): void
  (e: 'update:valueText', params: string): void
  (e: 'onChange', params: IDomEditor): void
}
const emits = defineEmits<TEmits>()
 
const editorRef = shallowRef()
 
const valueHtml = computed({
  get() {
    return props.valueHtml
  },
  set(valueHtml) {
    emits('update:valueHtml', valueHtml)
  }
})
 
watch(() => props.disable, bool => {
  if(!editorRef.value) return
  bool ? (editorRef.value as IDomEditor).disable() : (editorRef.value as IDomEditor).enable()
}, { deep: true })
 
const editorConfig = computed(() => {
  return { placeholder: props.placeholder }
})
 
// 記錄 editor 實例,重要!
const handleCreated = (editor: IDomEditor) => {
  editorRef.value = editor
}
 
// editor 改變
const onChange = (editor: IDomEditor) => {
  emits('onChange', editor)
}
 
// 銷毀編輯器
onBeforeUnmount(() => {
  if(!editorRef.value) return
  editorRef.value.destroy()
})
 
function getHtml() {
  return (editorRef.value as IDomEditor).getHtml()
}
function getText() {
  return (editorRef.value as IDomEditor).getText()
}
defineExpose({ getHtml, getText })
</script>
<style scoped>
.Wft-Editor {
  width: 100%;
  height: 100%;
}
.flex {
  display: flex;
}
 
.flex-col {
  flex-direction: column;
}
 
.default-border {
  border-bottom: 1px solid #ccc;
}
 
.flex-1 {
  flex: 1;
}
 
.overflow-y-auto {
  overflow-x: hidden;
  overflow-y: auto;
}
</style>

3. 使用 

<template>
  <div class="wel">
    <div class="btn">
      <button @click="submit">提交</button>
      <button @click="getHtml">獲取HTML</button>
      <button @click="getText">獲取TEXT</button>
      <button @click="editorDisable = !editorDisable">{{ editorDisable ? '啟用' : '禁用' }}</button>
    </div>
    <div class="editor-container">
      <Editor
        ref="EditorRef"
        :disable="editorDisable"
        v-model:value-html="editorValue"
        @on-change="editorChange"
      />
    </div>
  </div>
</template>
<script setup lang="ts">
import Editor from '@/comps/Editor/index.vue'
import { onMounted, ref, shallowRef } from 'vue'
import type { IDomEditor } from '@wangeditor/editor'
 
let editorValue = ref('') // 提交的數(shù)據(jù)
let editorDisable = ref(false)
let EditorRef = shallowRef<InstanceType<typeof Editor>>()
 
onMounted(() => {
  setTimeout(() => {
    editorValue.value = '<h1>回顯測試</h1>'
  }, 3000)
})
 
const submit = () => {
  console.log(editorValue.value)
}
const getHtml = () => {
  console.log(EditorRef.value?.getHtml())
}
const getText = () => {
  console.log(EditorRef.value?.getText())
}
const editorChange = (editor: IDomEditor) => {
  console.log(editor.getHtml())
  console.log(editor.getText())
}
</script>
<style scoped>
.wel {
  width: 100%;
  height: 100%;
}
.btn {
  width: 100%;
  height: 40px;
  display: flex;
  align-items: center;
}
.btn button {
  margin-left: 15px;
}
.editor-container {
  width: 100%;
  height: calc(100% - 40px);
}
</style>

4. 效果 

到此這篇關(guān)于Vue3中使用富文本編輯器的示例詳解的文章就介紹到這了,更多相關(guān)Vue3富文本編輯器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Element-ui DatePicker顯示周數(shù)的方法示例

    Element-ui DatePicker顯示周數(shù)的方法示例

    這篇文章主要介紹了Element-ui DatePicker顯示周數(shù)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 基于vuejs+webpack的日期選擇插件

    基于vuejs+webpack的日期選擇插件

    這篇文章主要為大家詳細介紹了基于vuejs+webpack的日期選擇插件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • vue通過接口直接下載java生成好的Excel表格案例

    vue通過接口直接下載java生成好的Excel表格案例

    這篇文章主要介紹了vue通過接口直接下載java生成好的Excel表格案例
    2020-10-10
  • vue+golang實現(xiàn)上傳微信頭像功能

    vue+golang實現(xiàn)上傳微信頭像功能

    這篇文章主要介紹了vue+golang實現(xiàn)上傳微信頭像功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • Vue批量文件上傳并發(fā)的踩坑指南

    Vue批量文件上傳并發(fā)的踩坑指南

    本文詳細探討了Vue批量文件上傳中的并發(fā)問題,并提出了四種解決方案:基礎(chǔ)版(固定并發(fā)數(shù))、進階版、高級版(和極簡版,每種方案針對不同場景和需求進行了優(yōu)化,旨在平衡上傳效率與服務器壓力,同時提高上傳的穩(wěn)定性和成功率,需要的朋友可以參考下
    2026-04-04
  • vue中slot(插槽)的介紹與使用

    vue中slot(插槽)的介紹與使用

    這篇文章主要給大家介紹了關(guān)于vue中slot(插槽)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用vue具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Vue.js彈出模態(tài)框組件開發(fā)的示例代碼

    Vue.js彈出模態(tài)框組件開發(fā)的示例代碼

    本篇文章主要介紹了Vue.js彈出模態(tài)框組件開發(fā)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue引入Stylus知識點總結(jié)

    Vue引入Stylus知識點總結(jié)

    在本篇文章里小編給各位整理的是一篇關(guān)于Vue引入Stylus知識點總結(jié)內(nèi)容,有需要的朋友們可以學習參考下。
    2020-01-01
  • vue中使用echarts并根據(jù)選擇條件動態(tài)展示echarts圖表

    vue中使用echarts并根據(jù)選擇條件動態(tài)展示echarts圖表

    雖然老早就看過很多echarts的例子, 但自己接觸的項目中一直都沒有真正用到過,直到最近才開始真正使用,下面這篇文章主要給大家介紹了關(guān)于vue中使用echarts并根據(jù)選擇條件動態(tài)展示echarts圖表的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 詳解基于Vue,Nginx的前后端不分離部署教程

    詳解基于Vue,Nginx的前后端不分離部署教程

    這篇文章主要介紹了詳解基于Vue,Nginx的前后端不分離部署教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

澎湖县| 包头市| 巴东县| 扎赉特旗| 合江县| 四会市| 安吉县| 贵南县| 台东市| 舟山市| 泊头市| 江阴市| 德钦县| 内丘县| 天台县| 宝山区| 武穴市| 永寿县| 盖州市| 威海市| 舞钢市| 扎兰屯市| 廊坊市| 琼结县| 宜兰市| 车致| 含山县| 呼玛县| 长春市| 金堂县| 郧西县| 丰县| 扎囊县| 交口县| 灵武市| 宣汉县| 平定县| 平利县| 神农架林区| 广平县| 许昌县|