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中void(0)的具体含义解释
Aug 02 Javascript
jquery控制display属性为none或block
Mar 31 Javascript
让IE8浏览器支持function.bind()方法
Oct 16 Javascript
AngularJS基础知识
Dec 21 Javascript
jQuery实现带滚动线条导航效果的方法
Jan 30 Javascript
Javascript闭包(Closure)详解
May 05 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 Javascript
react如何快速设置文件路径别名
Apr 28 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python实现学校管理系统
2018/01/11 Python
Python BS4库的安装与使用详解
2018/08/08 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
普通院校学生的自荐信
2013/11/27 职场文书
项目考察欢迎辞
2014/01/17 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技