vue3.0 加载json的“另类”方法(非ajax)
2020-09-07 18:00 金色海洋(jyk) 阅读(887) 评论(9) 编辑 收藏 举报问题
加载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的规范,总之先这么用着,不行再改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2010-09-07 发几个通知(这是最后一个水文了,以后就都是纯技术文)
2009-09-07 【自然框架】 权限 的视频演示(二): 权限到字段、权限到记录