&l">
赞
踩
踩了很多坑最后写出来了,需要props里加属性自己加,css部分也是很关键的内容
引用后可以在父组件用class设置height
很多处理的灵感来源于vue2.0项目vue-json-editor的代码,原项目代码还是写的很精彩的
安装命令:npm install jsoneditor --save
原项目文档:https://github.com/josdejong/jsoneditor
<template> <div> <div class="json" /> </div> </template> <script> import JSONEditor from 'jsoneditor'; export default { props: { name: String, modelValue: { type: [String, Number, Object, Array], default: () => { return {}; } } }, data() { return { jsonEditor: null, internalChange: false } }, mounted() { this.init(); }, watch: { modelValue: { handler(json) { if (!this.internalChange) { this.setValue(json); } } } }, methods: { init() { let self = this; this.jsonEditor = new JSONEditor( self.$el.querySelector(".json"), { mode: 'code', modes: ['code', 'view', 'tree'], indentation: 4, name: this.name, mainMenuBar: true, onModeChange() { // 去除作者信息 if (document.getElementsByClassName('jsoneditor-poweredBy').item(0)) { document.getElementsByClassName('jsoneditor-poweredBy').item(0).remove(); } }, onChange() { self.internalChange = true; self.$emit('update:modelValue', self.jsonEditor.getText()); // 防止双向绑定重复刷新数据 self.$nextTick(function () { self.internalChange = false; }); } }, self.modelValue); // 去除作者信息 document.getElementsByClassName('jsoneditor-poweredBy').item(0).remove(); }, setValue(jsonStr) { if (this.jsonEditor) { this.jsonEditor.set(jsonStr ? JSON.parse(jsonStr) : ''); } } } }; </script> <style> @import '~jsoneditor/dist/jsoneditor.min.css'; .json { height: 100%; } .jsoneditor { border: thin solid #409EFF; } .jsoneditor-menu { background-color: #409EFF; } .ace-jsoneditor { min-height: 50px; } </style>
引入,省略import部分
<json-editor class="json" name="body" v-model="bodyJson"></json-editor>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。