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 相关文章推荐
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
Aug 04 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
jQuery垂直多级导航菜单代码分享
Aug 18 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
详解ES6 Promise的生命周期和创建
Aug 18 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
JS变量提升及函数提升实例解析
Sep 03 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 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
一些星际专用术语解释
2020/03/04 星际争霸
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
PHP小教程之实现链表
2014/06/09 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
Javascript Math对象
2009/08/13 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python del()函数用法
2013/03/24 Python
python实现清屏的方法
2015/04/30 Python
深入浅析python with语句简介
2018/04/11 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
生物科学专业职业规划书范文
2014/02/11 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
数学教师个人总结
2015/02/06 职场文书
文艺晚会开场白
2015/05/29 职场文书
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android