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 相关文章推荐
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
详解AngularJS实现表单验证
Dec 10 Javascript
Angular表单验证实例详解
Oct 20 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
php简单数据库操作类的封装
Jun 08 Javascript
js仿微信抢红包功能
Sep 25 Javascript
JS处理一些简单计算题
Feb 24 Javascript
JavaScript Tab菜单实现过程解析
May 13 Javascript
JavaScript数组排序功能简单实现
May 14 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 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制作的意见反馈表源码
2007/03/11 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
js DOM模型操作
2009/12/28 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python实现维吉尼亚加密法
2019/03/20 Python
python tornado使用流生成图片的例子
2019/11/18 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
Python中实现输入一个整数的案例
2020/05/03 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
师范生自荐信
2013/10/27 职场文书
给朋友的道歉信
2014/01/09 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技