官方的TinyMCE Vue.js组件将TinyMCE集成到Vue.js项目中。这个过程根据我们的基本示例创建一个基本的Vue.js应用程序,其中包含一个TinyMCE编辑器
先决条件
-
在命令行或命令提示符上,安装Vue CLI工具包
npm install -g @vue/cli
2. 创建一个新的Vue.js项目名为tinymce-vue-demo
vue create --default tinymce-vue-demo
3. 切换到新创建的目录
cd tinymce-vue-demo
4. npm install tinymc-vue 包并将其保存到您的package.json,保存
npm install --save @tinymce/tinymce-vue
5. 使用文本编辑器,打开/path/to/tinymce-vue-demo/src/App.vue
-
Add a TinyMCE configuration to the
<template>using the<editor>tag. -
Add
import Editor from '@tinymce/tinymce-vue'to the start of the<script>. -
Add
editor: Editorto thedefault {components}.
这个TinyMCE编辑器配置应该在基本示例页面上复制这个示例
6. 使用tiny clound 或通过自托管TinyMCE提供对TinyMCE的访问。
Include the api-key option in the editor element and include your Tiny Cloud API key .
Such as:
<editor api-key='your-api-key' :init="{ /* your other settings */ }" />
TinyMCE can be self-hosted by: deploying TinyMCE independent of the Vue.js application, or bundling TinyMCE with the Vue.js application.
-
Deploy TinyMCE independent of the Vue.js application
To use an independent deployment of TinyMCE, add a script to either the<head>or the end of the<body>of the HTML file, such as:
Covered in this section:
-
[api-key](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23api-key) -
[cloud-channel](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23cloud-channel) -
[disabled](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23disabled) -
[id](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23id) -
[init](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23init) -
[initial-value](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23initial-value) -
[inline](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23inline) -
[model-events](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23model-events) -
[plugins](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23plugins) -
[tag-name](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23tag-name) -
[toolbar](https://link.zhihu.com/?target=https%3A//www.tiny.cloud/docs/integrations/vue/%23toolbar)
Installing the TinyMCE Vue.js integration using NPM
To install the tinymce-vue package and save it to your package.json.
$ npm install --save @tinymce/tinymce-vue
Using the TinyMCE Vue.js integration
- Load the component.
-
For bundle loader users (such as
webpack,rollup, orbrowserify):// es modules import Editor from '@tinymce/tinymce-vue'; // commonjs require // NOTE: default needed after require var Editor = require('@tinymce/tinymce-vue').default;
Add the editor to thecomponentsproperty of the app:
// This might look different depending on how you have set up your app
// but the important part is the components property
var app = new Vue({
el: '#app',
data: { /* Your data */ },
components: {
'editor': Editor // <- Important part
},
methods: { /* Your methods */}
})
Add the<editor>tag to thetemplate
<editor api-key="API_KEY" :init="{plugins: 'wordcount'}"></editor>
Configuring the editor
The editor accepts the following properties:
<editor
api-key="your-api-key"
cloud-channel="5"
:disabled=false
id="uuid"
:init= "{ }"
initial-value=""
:inline=true
model-events= ""
plugins=""
tag-name="div"
toolbar=""
value=""
/>
<template>
<!-- 富文本编辑器组件 -->
<div class="fy-tinymce-editor-wrap">
<editor v-model="myValue"
:init="init"
:disabled="disabled">
</editor>
</div>
</template>
<script>
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver'
// 编辑器插件plugins
// 更多插件参考:https://www.tiny.cloud/docs/plugins/
import 'tinymce/plugins/image'// 插入上传图片插件
import 'tinymce/plugins/media'// 插入视频插件
import 'tinymce/plugins/table'// 插入表格插件
import 'tinymce/plugins/lists'// 列表插件
import 'tinymce/plugins/wordcount'// 字数统计插件
export default {
components: {
Editor
},
props: {
value: {
type: String,
default: ''
},
// 基本路径,默认为xportal 项目,如果你的项目发布后的地址为目录形式,
baseUrl: {
type: String,
default: process.env.BASE_URL
},
disabled: {
type: Boolean,
default: false
},
plugins: {
type: [String, Array],
default: 'lists image media table wordcount'
},
toolbar: {
type: [String, Array],
default: 'undo redo | formatselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat'
}
},
data () {
return {
init: {
language_url: `${this.baseUrl}/tinymce/langs/zh_CN.js`,
language: 'zh_CN',
skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide`,
content_css: `${this.baseUrl}/tinymce/skins/content/default/content.css`,
// skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide-dark`, // 暗色系
// content_css: `${this.baseUrl}/tinymce/skins/content/dark/content.css`, // 暗色系
height: 300,
plugins: this.plugins,
toolbar: this.toolbar,
branding: false,
menubar: false,
// 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
// 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
images_upload_handler: (blobInfo, success, failure) => {
const img = 'data:image/jpeg;base64,' + blobInfo.base64()
success(img)
}
},
myValue: this.value
}
},
mounted () {
tinymce.init({})
},
watch: {
value (newValue) {
this.myValue = newValue
},
myValue (newValue) {
this.$emit('input', newValue)
}
}
}
</script>