前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue3.0 加载json的“另类”方法(非ajax) 定义组件.vue文件

vue3.0 加载json的“另类”方法(非ajax) 定义组件.vue文件

作者头像
用户1174620
发布2020-09-09 21:14:59
1.4K0
发布2020-09-09 21:14:59
举报
文章被收录于专栏:更流畅、简洁的软件开发方式

问题

加载json一定要用ajax的方式吗?

最近学习vue3.0,在实现一个功能的时候发现一个问题—— 写代码的时候,需要的json太长、太多,和代码放在一起太混乱。看代码总有翻来翻去,又没有“折叠”功能。 那么能不能把json放在一个单独的文件里面保存,然后在加载进来呢?

查了半天的资料,发现那叫一个折腾呀,各种各样的配置不说,最后还需要用ajax的方式来加载。这个,这么简单的事情为啥要这么折腾?

你看引用组件是不是很方便?一行代码就搞定了。就像下面这样:

import nfInput from '@/components/nf-form-item.vue'

等等,组件??

思路

上面提到了组件,那么能不能把json放在组件里面保存,然后“页面”里加载组件获取组件里面的json呢?各种尝试之后发现是可以的,涉及几个关键字:

组件、属性、data、生命周期、$emit、watch

  1. 先定义一个组件,设置一个属性,这个属性不是接收数据的,而是返回json的一个桥梁。
  2. 然后在组件的data里面定义需要的json。
  3. 在组件的 created 事件里面通过 $emit 向父级提交data(json)数据
  4. 由于是setup先执行,组件的created后执行,所以需要在setup里面设置watch监听属性的变化,得到需要的json后赋值给需要的对象。

当然,json可以直接写在created里面,不过还是感觉放在data里面更适合一些。

解决

定义组件

代码语言:javascript
复制
<template>
  <span :value="modelValue"></span> <!--使用span-->
</template>

<script>

export default {
  name: 'nf-getjson',
  props: {
    modelValue: Object  // 属性名称需要写modelValue 方便一些
  },
  data: function () {
    return {  //需要的json
      json: {
        controlId: 101,
        controlType: 100,
        colName: 'abc',
        isClear: true,
        disabled: false,
        required: true,
        class: '1',
        title: '1',
        rows: 5,
        cols: 50,
        placeholder: '请输入',
        readonly: false
      }
    }
  },
  created: function () {
    this.$emit('update:modelValue', this.json) // 返回给调用者,vue3.0的改变的地方
  }
}
</script>

.vue文件

代码语言:javascript
复制
<template>
  <nfJosn v-model="title" /> <!--就是那个传说中的组件,使用v-model 传递数据-->
</template>

<script>
import { ref, watch } from 'vue'  // 需要watch进行监听
import nfJosn from '@/components/nf-getjson.vue'  // 加载组件

export default {
  name: 'FormHelp',
  components: {
    nfHelp
  },
  setup () {
    const value = ref('')  // 定义一个属性
    const json = ref({})  // 接收返回的json
    // 监听属性变化
    watch(() => value.value, json => {
      json.value = json
    })

    return {
      value,
      json
    }
  }
}
</script>

基本就是这样,不需要加事件。

小结

以上代码在vue3.0 beta版里测试通过。 也不知道有没有人用过这种方式,也不知道这种方式是否符合vue的规范,总之先这么用着,不行再改。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 思路
  • 解决
    • 定义组件
      • .vue文件
      • 小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档