`
baobeituping
  • 浏览: 1068064 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

vue父子组件之间传值,获取URLJSON和组件之间的引用

    博客分类:
  • vue
 
阅读更多
 

目录(?)[+]

 

已经有几周没有更新博客了,最近自己也在学习就没有能及时抽身来写博客。

 

今天就来简单说一下vue-resource,这是vue的一个与服务器端通信的HTTP插件,用来从服务器端请求数据。话不多说,直接上干货吧。

 

这里PS一下,有人反映之前的代码下载下来,运行会报错而且会有上百个之多,这是因为在我初始化项目的时候没有启用eslint,eslint是用来检测代码风格的,我是觉得格式要求严的有点过分,所以禁用了eslint。如果对eslint感兴趣的朋友,可以看 eslint的官网 了解一下格式的要求和一些相应的配置。

 

我们主要来了解一下以下内容:

 

  • 模拟服务端返回数据
  • 用vue-resource向服务器请求数据

模拟服务器返回数据

 
我们用vue-cli创建的项目中,已经给我们提供了模拟服务器端返回数据的地方和接口。如下图所示,在项目目录的build目录下,有一个dev-server.js,在这个文件中,我们就可以来做一些模拟数据的工作。
 
 

1、准备一个data.json文件

在项目根目录下,新建一个data.json。这个文件里的内容就是我们要模拟的服务端返回的数据。
data.json的内容如下:
[javascript] view plain copy
 
  1. {  
  2.     "books": [  
  3.         { "price""111.00""title""语文""img""http://imgsrc.baidu.com/forum/w%3D580/sign=688d19b6422309f7e76fad1a420f0c39/0e143912b31bb051dfdebf0a327adab44bede0f9.jpg" },  
  4.         { "price""123.00""title""数学""img""http://shopimg.kongfz.com.cn/20130826/1746508/1746508YTGtm0_b.jpg"},  
  5.         { "price""113.00""title""英语""img""http://www.shiyi910.com/UploadFiles/2014-01/170/2014011322414554305.jpg"},  
  6.         { "price""112.00""title""物理""img""http://f.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=b62ac53d4b36acaf59b59ef849e9a126/f603918fa0ec08fa2cf895a359ee3d6d55fbda3e.jpg"}  
  7.     ]  
  8. }  
这里,books字段里的每一个对象表示一本书的信息。
 

2、“写接口”

 
修改dev-server.js文件,在大概第19行左右的 var app = express()之后,添加上如下内容
 
[javascript] view plain copy
 
  1. var appData = require('../data.json')  
  2. var books = appData.books  
  3.   
  4. var apiRoutes = express.Router()  
  5. apiRoutes.get('/books'function(req, res){  
  6.   res.json({  
  7.     data: books  
  8.   })  
  9. })  
  10.   
  11. app.use('/api', apiRoutes)  

简单说明一下,这段代码就是通过请求醒目根目录下的data.json文件,拿到文件的内容并赋值给appData变量,取到里面的books字段内容保存在books变量中。然后,通过express提供的Router对象,以及Router对象的一些方法(这里是get方法)来设置请求的路径,以及请求成功后的回调函数来处理要返回给请求端的数据。最后,我们要“使用”这个Router对象,为了统一管理api接口,我们在要请求的路由前边都加上‘api/’来表明这个路径是专门用来提供api数据的。在这个“接口”中,当我们访问“http://localhost:8080/api/books”路径的时候,就会返回data.json里的books对象给我们。
 
这里我们先来简单验证一下是否能成功返回数据,打开命令行,cd到当前项目目录,运行 npm run dev ,等项目运行成功之后,在浏览器地址栏输入http://localhost:8080/api/books,看到如下图所示,数据正常返回,OK!“接口”就开发完成了。
 
PS:在你的浏览器上可能看到的是没有经过格式化的数据,我的浏览器上装了一个json格式化的插件,这不是重点,重点是“接口”正常工作了,不是吗得意

 

 

用vue-resource向服务器请求数据

1、安装vue-resource

打开命令行,cd到项目目录,运行 npm install vue-resource --save或者cnpm install vue-resource --save,等待安装完成即可。
 

2、在main.js里导入并使用vue-resource

修改main.js如下
 
[javascript] view plain copy
 
  1. // main.js  
  2.   
  3. // 导入Vue,这个是必需的,在使用Vue之前,必须先导入  
  4. import Vue from 'vue'  
  5.   
  6. // 导入 vue-router,并使用  
  7. import VueRouter from 'vue-router'  
  8. Vue.use(VueRouter)  
  9.   
  10. // 导入 vue-resource,并使用  
  11. import VueResource from 'vue-resource'  
  12. Vue.use(VueResource)  
  13.   
  14. // 导入 pages 下的 Home.vue   
  15. import Home from './pages/Home'  
  16. import Detail from './pages/Detail'  
  17.   
  18. // 定义路由配置  
  19. const routes = [  
  20.     {  
  21.         path: '/',  
  22.         component: Home  
  23.     },  
  24.     {  
  25.         path: '/detail',  
  26.         component: Detail  
  27.     }  
  28. ]  
  29.   
  30. // 创建路由实例  
  31. const router = new VueRouter({  
  32.     routes  
  33. })  
  34.   
  35. // 创建 Vue 实例  
  36. new Vue({  
  37.   el: '#app',  
  38.   data(){  
  39.     return {  
  40.         transitionName: 'slide'  
  41.     }  
  42.   },  
  43.   router,  
  44.   watch: {  
  45.     // 监视路由,参数为要目标路由和当前页面的路由  
  46.     '$route' (to, from){  
  47.         const toDepth = to.path.substring(0, to.path.length-2).split('/').length  
  48.         // 官方给出的例子为 const toDepth = to.path.split('/').length 由于现在只有两个路由路径'/'和'/detail'  
  49.         // 按照官方给的例子,这两个路由路径深度都为 2 ,所以,这里稍作调整,不知道有什么不妥  
  50.         // 但目前在这个demo中能正常运行,如果知道更好的方法,欢迎留言赐教  
  51.         const fromDepth = from.path.substring(0, from.path.length-2).split('/').length  
  52.         this.transitionName = toDepth < fromDepth ? 'slide_back' : 'slide'  
  53.         // 根据路由深度,来判断是该从右侧进入还是该从左侧进入  
  54.     }  
  55.   }  
  56. })  
 

3、修改Home.vue和List.vue来接收服务端返回的数据

Home.vue修改如下:
 
[html] view plain copy
 
  1. <!-- Home.vue -->  
  2. <template>  
  3.     <div class="container">  
  4.         <!-- 由于html不区分大小写,所以js中驼峰命名方式在html中要改成用短横线连接的形式 -->  
  5.         <home-header></home-header>  
  6.         <div class="content">  
  7.             <ul class="cont_ul">  
  8.                 <list  
  9.                     v-for="item in items"  
  10.                     :price="item.price"  
  11.                     :title="item.title"  
  12.                     :img="item.img">  
  13.                 <!-- 通过v-bind(简写为“:”)绑定props来从父组件给子组件传值 -->  
  14.                 </list>  
  15.             </ul>  
  16.         </div>  
  17.     </div>  
  18. </template>  
  19. <style>  
  20.     .container {  
  21.         max-width: 640px;  
  22.         margin: 0 auto;  
  23.         overflow-x: hidden;  
  24.     }  
  25.     .cont_ul {  
  26.         padding-top: 0.05rem;  
  27.         margin: 0 -0.12rem;  
  28.     }  
  29.     .cont_ul:after {  
  30.         content: "";  
  31.         display: block;  
  32.         width: 0;  
  33.         height: 0;  
  34.         clear: both;  
  35.     }  
  36. </style>  
  37. <script>  
  38.     // 导入要用到的子组件  
  39.     import HomeHeader from '../components/HomeHeader'  
  40.     import List from '../components/List'  
  41.     export default {  
  42.         data () {  
  43.             return {  
  44.                 items: []  
  45.             }  
  46.         },  
  47.         // 在components字段中,包含导入的子组件  
  48.         components: {  
  49.             HomeHeader,  
  50.             List  
  51.         },  
  52.         // 在组件创建完成时,执行的钩子函数  
  53.         created (){  
  54.             // 在main.js里导入并使用vue-resource之后,就可以通过this.$http来使用vue-resource了,这里我们用到了get方法  
  55.             this.$http.get('/api/books').then((data) => {  
  56.                 // 由于请求成功返回的是Promise对象,我们要从data.body.data拿到books数组  
  57.                 this.items = data.body.data;  
  58.             })  
  59.         }  
  60.     }  
  61. </script>  


 
List.vue修改如下:
[html] view plain copy
 
  1. <!-- List.vue -->  
  2. <template>  
  3.     <li class="sec_li">  
  4.         <router-link to="/detail" class="lp_li_a">  
  5.             <div class="lp_li_imgWrap">  
  6.                 <img :src="img" alt="">  
  7.             </div>  
  8.             <p class="lp_li_name">{{ title }}</p>  
  9.             <p class="lp_li_price">¥{{ price }}元</p>  
  10.         </router-link>  
  11.     </li>  
  12. </template>  
  13.   
  14. <style scoped>  
  15.     .sec_li {  
  16.         float: left;  
  17.         width: 50%;  
  18.         margin-bottom: 0.1rem;  
  19.     }  
  20.     .lp_li_a {  
  21.         display: block;  
  22.         padding: 0.3rem 0;  
  23.         margin: 0 0.05rem;  
  24.         text-align: center;  
  25.         background: #fff;  
  26.     }  
  27.     .lp_li_imgWrap {  
  28.         padding: 0.24rem 0;  
  29.     }  
  30.     .lp_li_imgWrap > img {  
  31.         width: auto;  
  32.         height: 2.3rem;  
  33.     }  
  34.     .lp_li_name {  
  35.         height: 0.5rem;  
  36.         line-height: 0.5rem;  
  37.         font-size: 16px;  
  38.         color: #333;  
  39.     }  
  40.     .lp_li_price {  
  41.         height: 0.5rem;  
  42.         line-height: 0.5rem;  
  43.         font-size: 16px;  
  44.         color: #fb3b3b;  
  45.     }  
  46. </style>  
  47.   
  48. <script>  
  49.     export default {  
  50.         // 接收父组件传过来的以下几个属性  
  51.         props: ['price', 'title', 'img'],  
  52.     }  
  53. </script>  

然后,再回到浏览器,应该会看到如下图的效果了。
 
 
 
搞定!数据成功接入,可以来杯咖啡放松一下,回味一下整个过程的实现了。
 
分享到:
评论

相关推荐

    基于智能温度监测系统设计.doc

    基于智能温度监测系统设计.doc

    搜广推推荐系统中传统推荐系统方法思维导图整理-完整版

    包括userCF,itemCF,MF,LR,POLY2,FM,FFM,GBDT+LR,阿里LS-PLM 基于深度学习推荐系统(王喆)

    2023-04-06-项目笔记 - 第三百五十五阶段 - 4.4.2.353全局变量的作用域-353 -2025.12.22

    2023-04-06-项目笔记-第三百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.353局变量的作用域_353- 2024-12-22

    和美乡村城乡融合发展数字化解决方案.docx

    和美乡村城乡融合发展数字化解决方案.docx

    CNN基于Python的深度学习图像识别系统

    基于Python的深度学习图像识别系统是一个利用卷积神经网络(CNN)对图像进行分类的先进项目。该项目使用Python的深度学习库,如TensorFlow,构建和训练一个模型,能够自动识别和分类图像中的对象。系统特别适合于图像处理领域的研究和实践,如计算机视觉、自动驾驶、医疗影像分析等。 项目的核心功能包括数据预处理、模型构建、训练、评估和预测。用户可以上传自己的图像或使用预定义的数据集进行训练。系统提供了一个直观的界面,允许用户监控训练进度,并可视化模型的性能。此外,系统还包括了一个模型优化模块,通过调整超参数和网络结构来提高识别准确率。 技术层面上,该项目使用了Python编程语言,并集成了多个流行的机器学习库,如NumPy、Pandas、Matplotlib等,用于数据处理和可视化。模型训练过程中,系统会保存训练好的权重,以便后续进行模型评估和预测。用户可以通过简单的API调用,将新的图像输入到训练好的模型中,获取预测结果。

    拳皇97.exe拳皇972.exe拳皇973.exe

    拳皇97.exe拳皇972.exe拳皇973.exe

    基于python和协同过滤算法的电影推荐系统

    基于python和协同过滤算法的电影推荐系统 基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法

    DEV-CPP-RED-PANDA

    DEV-CPP-RED-PANDA

    Python语言求解旅行商(TSP)问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等

    Python语言求解旅行商问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等。

    pdfjs2.5.207和4.9.155

    pdfjs 用于在浏览器中查看/预览/打印pdf。 pdfjs 2.5.207 支持firefox/chrome/edge/ie11以上版本。 如果需要支持旧版本浏览器,可以使用这个,是未修改过的原版,支持打印和下载按钮。亲测有效。 pdf 4.9.155分两个包: pdfjs-4.9.155-dist.zip pdfjs-4.9.155-legacy-dist.zip

    建设项目现场高温人员中暑事故应急预案.docx

    建设项目现场高温人员中暑事故应急预案

    数据结构上机实验大作业-线性表选题.zip

    数据结构上机实验大作业-线性表选题.zip

    基于高德地图的校园导航全部资料+详细文档+高分项目.zip

    【资源说明】 基于高德地图的校园导航全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    全自动批量建站快速养权重站系统【纯静态html站群版】:(GPT4.0自动根据关键词写文章+自动发布+自定义友链+自动文章内链+20%页面加提权词)

    【静态站群程序视频演示,只有视频,不含程序,下载须知】【静态站群程序视频演示,只有视频,不含程序,下载须知】全自动批量建站快速养权重站系统【纯静态html站群版】:(GPT4.0自动根据关键词写文章+自动发布+自定义友链+自动文章内链+20%页面加提权词)

    9.30 SWKJ 男头7张+女头2张.zip

    9.30 SWKJ 男头7张+女头2张.zip

    基于java+springboot+vue+mysql的技术交流和分享平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea、vscode 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat

    一个通过单片机在各种屏幕上显示中文的解决方案.7z

    一个通过单片机在各种屏幕上显示中文的解决方案.7z

    Halcon模板匹配图像包

    图像

    线上辅导班系统-JAVA-基于springboot的线上辅导班系统的开发与设计(毕业论文)

    一、用户管理功能 用户注册与登录 学生注册:学生可以通过手机号、邮箱、社交账号等方式注册,填写个人信息(如姓名、年龄、学校等)。 家长/监护人账户:支持家长/监护人注册并管理学生账户,查看学习进度和成绩。 教师账户:教师可以注册并设置个人资料,上传资质认证文件。 管理员账户:管理员负责整个系统的管理,包括用户管理、课程管理、平台设置等。 用户权限管理 角色权限:系统根据用户类型(学生、家长、教师、管理员)分配不同权限,确保信息安全。 家长监督:家长可以查看子女的学习进度、成绩和教师反馈,参与学习监督。 个人资料管理 用户可以在个人中心更新基本信息,设置个人头像、联系方式、密码等。 支持学籍信息的维护,例如学生的年级、班级、课程历史等。 二、课程管理功能 课程设置 课程创建与编辑:教师或管理员可以创建和编辑课程内容,上传课件、视频、文档等教学材料。 课程分类:根据学科、年级、难度等维度进行课程分类,方便学生浏览和选择。 课程排课:管理员可以设置课程的时间表、教学内容和授课教师,并调整上课时间和频率。 课程安排与通知 课程预约:学生可以在线选择并预约感兴趣的课程,系统根据学生的时

    英特尔2021-2024年网络连接性和IPU路线图

    内容概要:本文档介绍了英特尔2021年至2024年的网络连接性产品和智能处理单元(IPU)的战略和技术路线图。涵盖了从10GbE到200GbE的不同系列以太网适配器的特性、性能和发布时间。详细列出了各个产品的关键功能,如PCIe接口、安全特性、RDMA支持等。同时,介绍了IPU的发展计划,包括200G、400G和800G的不同代次产品的性能提升和新的功能特点。 适合人群:从事网络工程、数据中心管理、IT架构设计的专业技术人员。 使用场景及目标:本文档主要用于了解英特尔未来几年在以太网适配器和IPU领域的技术和产品规划,帮助企业在采购和部署网络设备时做出决策。同时,为研究人员提供最新技术发展趋势的参考。 其他说明:文档内容涉及的技术细节和时间表可能会有变动,请以英特尔官方发布的最新信息为准。

Global site tag (gtag.js) - Google Analytics