将summernote在vue项目中封装成组件

记得移入依赖

<!-- include libraries(jQuery, bootstrap) -->
<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>

然后开始封装我们的组件

<template>
<div class="summernoteBox" v-if="true">
    <div :id="id"></div>
</div>
</template>
<script>
import tools from '@/js/tools.js';
export default {
    props:{
        value: {
            type: String,
            default: ''
        },
        id:{
            type:String,
            default:'summerNOte'+ new Date().getTime(),
        }
    },
    watch: {
       id:{
           handler(newval){
            //    console.log(newval)
           },
           immediate:true
       } 
    },
    data(){
        return{
            // id:'summerNOte'+ new Date().getTime(),
        }
    },
    created(){
    },
    mounted() {
        var self=this;
        self.summernoteInit().then(()=>{
            // summernote发生改变
            $('#'+ self.id).on('summernote.change', function(we, contents, $editable) {
                self.summerNoteChange();
            });
            //初始赋值
            $('#'+ self.id).summernote('code', self.value);
        })
    },
    methods: {
        summernoteInit(){//编辑器初始化
            var self=this;
            return new Promise(resolve=>{
                //初始化摘要内容富文本编辑器
                $('#'+ self.id).summernote({
                    lang: 'zh-CN',//语言
                    placeholder: '请输入内容',//提示语
                    height: 200,//高度
                     'auto',//宽度  也可以指定宽度
                    htmlMode: true,
                    toolbar: [//工具栏配置
                        ['style', ['bold', 'italic', 'underline', 'clear']],
                        
                        ['font',['strikethrough','superscript','subscript']],
                        ['para', ['ul', 'ol', 'paragraph']],
                        ['fontsize',['fontsize']],
                        ['fontname',  tools.isPC()?['fontname']:[]],
                        ['insert', []],
                        // ['view', ['fullscreen']]
                    ],
                    fontSizes: ['12', '14', '18','20', '24', '36'],//字体大小配置
                    fontSizeUnits: ['px'],
                    fontNames: [//字体类型配置
                        '宋体','微软雅黑','楷体','黑体','隶书'
                    ],
                    callbacks: {//回调函数
                        onSubmit: function() {
                            // vm.richContent = $('#summernote').summernote('code')
                        },
                        onKeyup:function(){
                            //
                        }
                    }
                });
                resolve();
            });
            
        },
        summerNoteChange(){//富文本编辑器发生改变
            var self=this;
            self.$emit('input',$('#'+ self.id).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>

在页面中使用

import SummerNote from '@/components/summerNote.vue';
components:{SummerNote},

要传id,放置自动生成的id一样,会只显示一个summernote编辑器

<SummerNote :id="'summerNote' + new Date().getTime()" v-model="text" />
<SummerNote :id="'summerNote' + new Date().getTime()" v-model="text1" />

原文地址:https://www.cnblogs.com/fqh123/p/12289378.html