您现在的位置是:网站首页>软件开发>前端技术栈>vuevue
vue2.X版本使用summernote的坑
风口下的猪2022-08-10【vue】
简介
网上一大堆summmernote在vue中的使用,大部分建议
(1)使用npm安装jQuery、bootstrap、font-awesome、codemirror、summernote的包及依赖。
(2)同时vue.config.js中配置jquery
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'jquery': path.resolve(__dirname, '../node_modules/jquery/src/jquery')
}
},
(3)main.js中引入这些js/css
(4)封装summernote.vue组件使用
最后问题一大堆
(1)jQuery not defined
解决方法是修改node_modules/summernote/summernote.js中的JQuery为jquery
(2)提示rouuter.js等常规js找不到
解决方法是将上述vue.config.js中resolve的alias->'@'相关配置去掉
(3)Uncaught TypeError: jquery__WEBPACK_IMPORTED_MODULE_0___default(...)
解决方法是封装的summernote组件中,不要在import后写$('#summernote'),而要在mounted()周期函数中使用$('#summernote')
(4)编辑器样式冲突且混乱
解决方法是果断放弃npm相关包并引用相关包的js/css,改为在根组件index.html中通过cdn的方式进行
上完整解决方案
(1)vue.config.js配置jquery
module.exports = {
assetsDir:'static',
publicPath: './',
configureWebpack: {
resolve: {
alias: {
// '@': resolve('src'),
'jquery': path.resolve(__dirname, './node_modules/jquery/src/jquery'),
},
},
(2)根组件public/index.html中cdn方式引入相关资源
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script>
<!-- include summernote css/js -->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.12/summernote.js"></script>
(3)封装summernote.vue
<template>
<div class="summernoteBox">
<div id="summernote"></div>
</div>
</template>
<script>
import domain from "@/lib/config/domain.js";
export default {
props:{
value: {
type: String,
default: ''
},
},
data(){
return{
}
},
created(){
},
mounted() {
var self=this;
self.summernoteInit().then(()=>{
// summernote发生改变
$('#summernote').on('summernote.change',(we, contents, $editable)=>{
self.summerNoteChange();
});
//初始赋值
$('#summernote').summernote('code', self.value);
})
},
methods: {
summernoteInit(){//编辑器初始化
var self=this;
return new Promise(resolve=>{
//初始化摘要内容富文本编辑器
$('#summernote').summernote({
lang: 'zh-CN',//语言
placeholder: '请输入内容',//提示语
height: 500,//高度
width: 'auto',//宽度 也可以指定宽度
htmlMode: true,
fontSizes: ['12', '14', '18','20', '24', '36'],//字体大小配置
fontSizeUnits: ['px'],
fontNames: [
'宋体','微软雅黑','楷体','黑体','隶书'
],
callbacks: {//回调函数
onSubmit: function() {
// vm.richContent = $('#summernote').summernote('code')
},
onKeyup:function(){
//
},
onImageUpload: function (files) {
var syformData = new FormData();
syformData.append('file', files[0]);
$.ajax({
url: domain.domain_api+ "/admin/upload/upload",//上传图片文件处理地址,
type: "POST",
data: syformData,
dataType: 'JSON',
processData: false,
contentType: false,
success: function (res) {
console.log(res.data[0])
if(res.code!=1000){
alert(res.msg);
}else{
$('#summernote').summernote('editor.insertImage',domain.domain_source+''+res.data[0]);
}
},
error: function (error) {
alert('图片上传出错,文件过大或者其他情况');
}
});
}
}
});
resolve();
});
},
summerNoteChange(){//富文本编辑器发生改变
this.$emit('input',$('#summernote').summernote('code'));
}
},
}
</script>
<style scoped>
.summernoteBox /deep/ .note-editable ul{
padding:0 20px;
}
.summernoteBox /deep/ .note-editable ul li{
list-style:disc;
}
.summernoteBox /deep/ .note-editable ol li{
list-style:decimal;
}
.summernoteBox /deep/ .note-editable ol{
padding:0 20px;
}
</style>
很赞哦! (0)
/ponder/index.php/index/catelist/catelist/cateid/10.html
相关阅读 (同一栏目)
- v-html和直接插值的区别
- vue.js中{{}}允许原生的js代码
- 事件修饰符
- v-for推荐写法 :key=
- {{}}和
- src、href等赋值,采用数据绑定方式时的“动态刷新”问题
- class动态绑定时,短分割线命名的class报错问题
- vue里ref ($refs)用法
- uniapp 如何禁止或监听默认返回事件
- 解决[Vue warn]:Error in render:
- created()和mounted()使用注意项
- this.$nextTick()
- can not resolve the wrapperDom
- vue中 props中的变量不能在less中使用
- vue.js阻止事件冒泡和默认事件
- Vue报错
- import ... from和import {} from 的区别
- icons
- vue组件化梳理 (1)组件注册
- 通过vue-cli创建vue项目
- vue.use()的作用是什么
- 【解决】控制台报错Uncaught TypeError: Object(...) is not a function at eval (vue-router.esm-bundler.js
- vue路由跳转了但界面不显示的问题及解决
- Vue 路由设置梳理 (1)安装及初始路由
- Vue 路由设置梳理 (2)路由规则编写
- Vue 路由设置梳理 (3)申明式路由跳转及编程式路由跳转
- Vue 路由设置梳理 (4)首页重定向
- vue-cli项目的前端跨域解决方案
- vue-cli项目proxy跨域,在线上针对A域名跨B域名情况失效的解决方法
- axios上传图片报500
- vue-cli项目,点击某个菜单后公共模板(header/footer/menu等)不见了,只有主体页面部分
- vue-cli项目中的404
- vue-cli项目,如何给页面设置网站title、keywords、description等meta信息
- vue-cli项目网站,如何设置网站图标
- npm 安装和卸载插件包
- vue项目中通过CDN方式引入外包js/css
- vue2.X版本使用summernote的坑
- vue中使用html2canvas的坑(1)网络图片空白
- vue中使用html2canvas的坑(2)最外层dom的border-radius失效
- vue中使用html2canvas的坑(3)画图片时不支持object-fit:cover的问题
- js调用外部vue中的methods
- vue-cli项目控制无token时页面重定向跳转到登录,注意循环堆栈问题
- vue中input标签上传本地文件或图片后获取完整路径,如E:\medicineOfCH\stageImage\xxx.jpg
- vue 中$t()的作用
- vue路由守卫中next方法的理解
- 全局路由 router.afterEach 与 router.beforeEach
- 独享路由 beforeEnter
- 组件内路由守卫 beforeRouteEnter和beforeRouteLeave
- 关于next({ ...to, replace: true })的理解
- mixin混入
- vue语法 `${ }` (模版字符串)
- 组件内通信利器provide/inject
- vue webpack性能优化(二) 优化方向确定
- Vue中的爷孙传值$attrs 和利用$listeners 孙爷传值
- 在vue中实现onShow生命周期函数
- vue中this.$router.back()、this.$router.go()的区别使用
- Vue中 keep-alive 详解
栏目目录
标签云
站点信息
- 文章统计:528篇
- 移动端访问:扫码进入SQ3R
