问题
加载json一定要用ajax的方式吗?
最近学习vue3.0,在实现一个功能的时候发现一个问题——
写代码的时候,需要的json太长、太多,和代码放在一起太混乱。看代码总有翻来翻去,又没有“折叠”功能。
那么能不能把json放在一个单独的文件里面保存,然后在加载进来呢?
查了半天的资料,发现那叫一个折腾呀,各种各样的配置不说,最后还需要用ajax的方式来加载。这个,这么简单的事情为啥要这么折腾?
你看引用组件是不是很方便?一行代码就搞定了。就像下面这样:
import nfInput from '@/components/nf-form-item.vue'
等等,组件??
思路
上面提到了组件,那么能不能把json放在组件里面保存,然后“页面”里加载组件获取组件里面的json呢?各种尝试之后发现是可以的,涉及几个关键字:
组件、属性、data、生命周期、$emit、watch
- 先定义一个组件,设置一个属性,这个属性不是接收数据的,而是返回json的一个桥梁。
- 然后在组件的data里面定义需要的json。
- 在组件的 created 事件里面通过 $emit 向父级提交data(json)数据
- 由于是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的资料请关注其它相关文章!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?