vueにTinymceリッチテキストエディタを追加
6772 ワード
1.package.jsonにプラグインをインストールする
"@tinymce/tinymce-vue": "^2.1.0",
"tinymce": "^5.1.5"
追加後、再インストール
2.パッケージコンポーネントは直接使用することもでき、パッケージは後期の延性を考慮する
// ,
手动引入需要的插件
import tinymce from 'tinymce/tinymce'
import 'tinymce/themes/silver/theme'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/plugins/image'
import 'tinymce/plugins/link'
import 'tinymce/plugins/code'
import 'tinymce/plugins/table'
import 'tinymce/plugins/lists'
import 'tinymce/plugins/contextmenu'
import 'tinymce/plugins/colorpicker'
import 'tinymce/plugins/textcolor'
import 'tinymce/plugins/preview'
import 'tinymce/plugins/media'
Dataでエディタを定義します.アップロード方法は2種類あるので、2つのアップロード方法を書いてmethodsに書いていましたが、呼び出すとき、調整できません.私が書いた問題があるかもしれません.自分で試してみてください.
init: {
fontsize_formats: '8px 10px 12px 14px 16px 18px', //
language_url: '../../static/tinymce/langs/zh_CN.js',
language: 'zh_CN',
skin_url: '../../static/tinymce/skins/ui/oxide',
height: 500,
content_css: ['../../static/tinymce/skins/content/default/content.css'],
accept: '',
// eslint-disable-next-line standard/object-curly-even-spacing
branding: false,
selector: '#textarea',
paste_data_images: false,
file_picker_types: 'media',
media_live_embeds: true,
plugins: ' link table lists image code colorpicker textcolor contextmenu ', // media
toolbar: ' preview bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | undo redo | code uploadpic',
audio_template_callback: function (data) {
return ''
},
setup: (editor) => {
// eslint-disable-next-line eqeqeq
editor.ui.registry.addButton('preview', {
text: ' ',
onAction: (_) => {
this.preview()
}
})
},
file_picker_callback: (cb, value, meta) => {
// meidia , meta.filetype == 'media' , file_picker_callback media( )、image( )、file( )
// eslint-disable-next-line eqeqeq
if (meta.filetype == 'media') {
// type=file input
let input = document.createElement('input')
input.setAttribute('type', 'file')
input.onchange = function () {
let file = this.files[0]// 。 ,
uploadPic(file, cb)
/* let xhr, formData;
xhr = new XMLHttpRequest();
xhr.open('POST', self.apiUrl);
xhr.withCredentials = self.credentials;
xhr.upload.onprogress = function (e) {
// (e.loaded / e.total * 100)
};
xhr.onerror = function () {
//
console.log(xhr.status);
return;
};
xhr.onload = function () {
let json;
if (xhr.status < 200 || xhr.status >= 300) {
console.log('HTTP : ' + xhr.status);
return;
}
json = JSON.parse(xhr.responseText);
// JSON {status: 0, msg: " ", data: {location: "/localImgs/1546434503854.mp4"}}
if(json.status==0){
//
let mediaLocation=json.data.location;
//cb() , mediaLocation
cb(mediaLocation, { title: file.name });
}else{
console.log(json.msg);
return;
}
}; */
}
//
input.click()
}
async function uploadPic(blobInfo, cb) {
let formData = new FormData()
// , ,
// formData.append('file', blobInfo)
// let res = await upload.upload(formData)
// let data = res.data
// eslint-disable-next-line eqeqeq
// if (data && data.code == 0) {
// cb(data.data, {title: blobInfo.name})
// return data.data
// } else {
// }
}
},
images_upload_handler: (blobInfo, success, failure) => {
if (blobInfo.blob().size > 1024 * 1024) {
failure(' , 1M')
} else {
uploadPic(this.type)
}
async function uploadPic(type) {
let formData = new FormData()
// , ,
// formData.append('file', blobInfo.blob())
// let res
// if (type === 'preview') {
// res = await pagemanager.uoloadImage(formData)
// } else {
// res = await upload.upload(formData)
// }
// let data = res.data
// // eslint-disable-next-line eqeqeq
// if (data && data.code == 0) {
// success(data.data)
// } else {
// failure(' ')
// }
}
}
}
リッチテキストの初期化
components: {Editor},
created() {
tinymce.init(this.init)
},
*私がインストールを開始したバージョンは高すぎて、プラグインを導入した後、エディタをロードすることができなくて、それからバージョンを今使っているこれに下げて、ロードすることができます
ドキュメントや度娘にも言及されていますが、バージョンとプラグインの関係では、バージョンは5を超えてはいけません.