vue3.0 加载json的方法(非ajax)


Posted in Javascript onOctober 26, 2020

问题

加载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里面更适合一些。

解决

定义组件

<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文件

<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的规范,总之先这么用着,不行再改。

以上就是vue3.0 加载json的方法(非ajax)的详细内容,更多关于vue3.0 加载json的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
json 定义
Jun 10 Javascript
js中top/parent/frame概述及案例应用
Feb 06 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
javascript 获取浏览器版本
Jan 21 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
关于Vue单页面骨架屏实践记录
Dec 13 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
Sep 15 Javascript
Vue模板语法中数据绑定的实例代码
May 17 Javascript
微信小程序用户拒绝授权的处理方法详解
Sep 20 Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 #Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 #Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 #Javascript
jQuery实现简单评论区功能
Oct 26 #jQuery
vue.js封装switch开关组件的操作
Oct 26 #Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 #Javascript
vue render函数动态加载img的src路径操作
Oct 26 #Javascript
You might like
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
iOS10推送通知开发教程
2016/09/19 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
详解rem 适配布局
2018/10/31 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
外语专业毕业生个人的自荐信
2013/11/19 职场文书
大学生创业感言
2014/01/25 职场文书
企业元宵节主持词
2014/03/25 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
体育运动口号
2014/06/09 职场文书
2014年团队工作总结
2014/11/24 职场文书
团委工作总结2015
2015/04/02 职场文书
小学班级管理心得体会
2016/01/07 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL