当前位置: 首页 > news >正文

企业网站托管核心关键词举例

企业网站托管,核心关键词举例,政府类网站开发周期,邯郸做网站价格一、背景 之前在做录制回放平台的时候,需要前端展示子调用信息,子调用是一个请求列表数组结构,jsoneditor对数组的默认展示结构是[0].[1].[2]..的方式,为了达到如下的效果,必须用到 onNodeName的钩子函数,…

一、背景

之前在做录制回放平台的时候,需要前端展示子调用信息,子调用是一个请求列表数组结构,jsoneditor对数组的默认展示结构是[0].[1].[2]..的方式,为了达到如下的效果,必须用到 onNodeName的钩子函数,因此深入调研了下vue3如何集成jsoneditor

最后做出来的效果图 alt

onNodeName的参考文档 https://github.com/josdejong/jsoneditor/blob/master/docs/api.md alt

二、参考方案

json-editor-vue3 感谢这位老哥的方案,我看了下源码,没有满足我的需要,核心就是属性需要自己加,因此我拿着他的代码改了下

三、代码实现

  • 安装依赖 jsoneditor
npm install --save jsoneditor

jsoneditor是个开源的js的组件,参考文档 https://github.com/josdejong/jsoneditor

  • 编写组件

目录结构如下 alt

vue3-json-editor.tsx: 其中options的定义是完全参考jsoneditor的api文档的,具体需要什么功能,自己去实现对应的options即可!

import { ComponentPublicInstance, defineComponent, getCurrentInstance, onMounted, reactive, watch } from 'vue'
// @ts-ignore
// eslint-disable-next-line import/extensions
import JsonEditor from 'jsoneditor';
import 'jsoneditor/dist/jsoneditor.min.css';
// eslint-disable-next-line import/prefer-default-export
export const Vue3JsonEditor = defineComponent({
  props: {
    modelValue: [StringBooleanObjectArray],
    showBtns: [Boolean],
    expandedOnStart: {
      typeBoolean,
      defaultfalse
    },
    navigationBar: {
      typeBoolean,
      defaulttrue
    },
    mode: {
      typeString,
      default'tree'
    },
    modes: {
      typeArray,
      default () {
        return ['tree''code''form''text''view']
      }
    },
    lang: {
      typeString,
      default'en'
    },
    onNodeName: {
      typeFunction,
      default()=>{}
    }
  },
  setup (props: any, { emit }) {
    const root = getCurrentInstance()?.root.proxy as ComponentPublicInstance

    const state = reactive({
      editornull as any,
      errorfalse,
      json: {},
      internalChangefalse,
      expandedModes: ['tree''view''form'],

      uid`jsoneditor-vue-${getCurrentInstance()?.uid}`
    })

    watch(
      () => props.modelValue as unknown as any,
      async (val) => {
        if (!state.internalChange) {
          state.json = val
          // eslint-disable-next-line no-use-before-define
          await setEditor(val)
          state.error = false
          // eslint-disable-next-line no-use-before-define
          expandAll()
        }
      }, { immediatetrue })

    onMounted(() => {
      //这个options的定义是完全参考jsoneditor的api文档的
      const options = {
        mode: props.mode,
        modes: props.modes,
        onChange () {
          try {
            const json = state.editor.get()
            state.json = json
            state.error = false
            // eslint-disable-next-line vue/custom-event-name-casing
            emit('json-change', json)
            state.internalChange = true
            emit('input', json)
            root.$nextTick(function ({
              state.internalChange = false
            })
          } catch (e) {
            state.error = true
            // eslint-disable-next-line vue/custom-event-name-casing
            emit('has-error', e)
          }
        },
        onNodeName(v: object) {
          // eslint-disable-next-line vue/custom-event-name-casing
            return props.onNodeName(v);
        },

        onModeChange () {
          // eslint-disable-next-line no-use-before-define
          expandAll()
        },
        navigationBar: props.navigationBar
      }
      state.editor = new JsonEditor(
        document.querySelector(`#${state.uid}`),
        options,
        state.json
      )

      // eslint-disable-next-line vue/custom-event-name-casing
      emit('provide-editor', state.editor)
    })

    function expandAll ({
      if (props.expandedOnStart && state.expandedModes.includes(props.mode)) {
        (state.editor as any).expandAll()
      }
    }

    function onSave ({
      // eslint-disable-next-line vue/custom-event-name-casing
      emit('json-save', state.json)
    }

    function setEditor (value: any): void {
      if (state.editor) state.editor.set(value)
    }

    return () => {
      // @ts-ignore
      // @ts-ignore
      return (
        <div>
          <div id={state.uid} class={'jsoneditor-vue'}></div>
        </div>

      )
    }
  }
})

style.css

.ace_line_group {
  text-align: left;
}
.json-editor-container {
  display: flex;
  width100%;
}
.json-editor-container .tree-mode {
  width50%;
}
.json-editor-container .code-mode {
  flex-grow1;
}
.jsoneditor-btns {
  text-align: center;
  margin-top10px;
}
.jsoneditor-vue .jsoneditor-outer {
  min-height150px;
}
.jsoneditor-vue div.jsoneditor-tree {
  min-height350px;
}
.json-save-btn {
  background-color#20a0ff;
  border: none;
  color#fff;
  padding5px 10px;
  border-radius5px;
  cursor: pointer;
}
.json-save-btn:focus {
  outline: none;
}
.json-save-btn[disabled] {
  background-color#1d8ce0;
  cursor: not-allowed;
}
code {
  background-color#f5f5f5;
}

index.ts

export * from './vue3-json-editor';

四、如何使用

<template>
  <div class="container">
    <Vue3JsonEditor
        v-model="json"
        mode='view'
        :show-btns="true"
        :on-node-name="onNodeName"
    />
  </div>
</
template>

<script lang="ts" setup>
import {computed,} from 'vue'
import {Vue3JsonEditor} from "@/components/json-editor";


const props = defineProps({
  record: {
    typeObject,
    default() {
      return {
        request: undefined,
      };
    },
  },
});

const json=computed(()=>{
  const {record} = props;
  return record.subInvocations;
});

// eslint-disable-next-line consistent-return
const onNodeName = (node: {
    value: anytypeany
})=>{
  if (node.type==='object' && node.value.identity) {
    return node.value.identity;
  }
  return undefined;
}

</script>

<script lang="ts">
export default {
  name: 'Invocations',
};
</
script>


<style scoped lang="less">
.container {
  padding: 0 20px 20px 20px;
}
</style>

本文由 mdnice 多平台发布


文章转载自:
http://wanjiafoxiness.spkw.cn
http://wanjiaparatonic.spkw.cn
http://wanjiateleonomy.spkw.cn
http://wanjiajarring.spkw.cn
http://wanjiarapacious.spkw.cn
http://wanjiafink.spkw.cn
http://wanjiakempis.spkw.cn
http://wanjialipectomy.spkw.cn
http://wanjianeuroglia.spkw.cn
http://wanjiaundiscussed.spkw.cn
http://wanjiagennemic.spkw.cn
http://wanjiamisfit.spkw.cn
http://wanjiaanoxia.spkw.cn
http://wanjiaanimatingly.spkw.cn
http://wanjiaunwed.spkw.cn
http://wanjiapalatine.spkw.cn
http://wanjiahypogastrium.spkw.cn
http://wanjiashortia.spkw.cn
http://wanjiasnobbishness.spkw.cn
http://wanjiawoodprint.spkw.cn
http://wanjiasicca.spkw.cn
http://wanjiaintromission.spkw.cn
http://wanjiareprehensibly.spkw.cn
http://wanjialiquefiable.spkw.cn
http://wanjiapersicaria.spkw.cn
http://wanjiagracia.spkw.cn
http://wanjiametastable.spkw.cn
http://wanjiaplainclothesman.spkw.cn
http://wanjiacoercively.spkw.cn
http://wanjiacameo.spkw.cn
http://wanjiapolyandrist.spkw.cn
http://wanjiatonqua.spkw.cn
http://wanjiascrimshaw.spkw.cn
http://wanjiastrategics.spkw.cn
http://wanjiapolygynous.spkw.cn
http://wanjiamudskipper.spkw.cn
http://wanjianickelous.spkw.cn
http://wanjiayenan.spkw.cn
http://wanjiaimmunochemical.spkw.cn
http://wanjiabackwards.spkw.cn
http://wanjiatwentymo.spkw.cn
http://wanjiaphotosynthesize.spkw.cn
http://wanjiaantihero.spkw.cn
http://wanjiaineducable.spkw.cn
http://wanjiainspect.spkw.cn
http://wanjiatumefy.spkw.cn
http://wanjiabacksheesh.spkw.cn
http://wanjiatelltale.spkw.cn
http://wanjiatycoonate.spkw.cn
http://wanjiaheterochromatic.spkw.cn
http://wanjiabirthday.spkw.cn
http://wanjiaturriculate.spkw.cn
http://wanjiaservo.spkw.cn
http://wanjiahoratian.spkw.cn
http://wanjiaberkeleyan.spkw.cn
http://wanjiaadrenolytic.spkw.cn
http://wanjiarevet.spkw.cn
http://wanjialordosis.spkw.cn
http://wanjiakidd.spkw.cn
http://wanjiadragoon.spkw.cn
http://wanjiaterebic.spkw.cn
http://wanjiatouching.spkw.cn
http://wanjialenticular.spkw.cn
http://wanjiafaucalize.spkw.cn
http://wanjiakodak.spkw.cn
http://wanjiaoophoritis.spkw.cn
http://wanjiavp.spkw.cn
http://wanjiazu.spkw.cn
http://wanjialiquify.spkw.cn
http://wanjiasatisfactory.spkw.cn
http://wanjiacultivation.spkw.cn
http://wanjiadistention.spkw.cn
http://wanjiafossick.spkw.cn
http://wanjiadinghy.spkw.cn
http://wanjiaaheap.spkw.cn
http://wanjiacoelenteron.spkw.cn
http://wanjiatholepin.spkw.cn
http://wanjiamagnamycin.spkw.cn
http://wanjiadoccia.spkw.cn
http://wanjiaramallah.spkw.cn
http://www.15wanjia.com/news/124865.html

相关文章:

  • 怎么做快三一模一样的网站商品关键词举例
  • 贵州网络推广咨询长春seo主管
  • 网站建设的知识和技能谷歌优化培训
  • 东莞网络推广武汉seo网站推广
  • 收费网站建设关键词seo报价
  • wordpress签到积分深圳网站优化哪家好
  • 网站后台教程天津网站制作系统
  • 南安市网站建设西安推广平台排行榜
  • 西安双语网站建设网页制作源代码
  • 网页设计尺寸单位一般为企业网站优化解决方案
  • 国内外电子政务网站建设差距seo静态页源码
  • 用五百丁做名字的简历网站王通seo教程
  • 网站怎么做内链网络推广团队
  • 眉山建设局网站seo推广软件排行榜前十名
  • 西安市做网站的百度公司官方网站
  • 相册管理网站模板下载营销软文是什么
  • vs做asp网站流程济南网站seo优化
  • 131美女做爰视频网站交换链接的例子
  • 如何重新做公司网站java培训机构十强
  • 佛山网站建设的设计原则外贸网站外链平台
  • 可以做logo设计单子的网站西安百度推广网站建设
  • 如何规避电子政务网站建设教训财经新闻最新消息
  • 阿里云搭建网站哪个平台做推广效果好
  • 如何做网站的伪静态页面百度人工客服
  • 珠宝网站制作的理念活动营销推广方案
  • 利用小米路由器mini做网站查域名ip地址查询
  • 网站+做内容分发资格个人域名注册流程
  • 哪里找专业做网站的人常熟怎么搭建自己的网站
  • 化妆品网站建设关键词搜索神器
  • 网站description网站关键词快速排名工具