Vue.js2.0开发环境搭建(三)

转载自  Vue.js2.0从入门到放弃---入门实例(三)

今天就来简单说一下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的内容如下:
{"books": [{ "price": "111.00", "title": "语文", "img": "http://imgsrc.baidu.com/forum/w%3D580/sign=688d19b6422309f7e76fad1a420f0c39/0e143912b31bb051dfdebf0a327adab44bede0f9.jpg" },{ "price": "123.00", "title": "数学", "img": "http://shopimg.kongfz.com.cn/20130826/1746508/1746508YTGtm0_b.jpg"},{ "price": "113.00", "title": "英语", "img": "http://www.shiyi910.com/UploadFiles/2014-01/170/2014011322414554305.jpg"},{ "price": "112.00", "title": "物理", "img": "http://f.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=b62ac53d4b36acaf59b59ef849e9a126/f603918fa0ec08fa2cf895a359ee3d6d55fbda3e.jpg"}]
}
这里,books字段里的每一个对象表示一本书的信息。

2、“写接口”


修改dev-server.js文件,在大概第19行左右的 var app = express()之后,添加上如下内容
var appData = require('../data.json')
var books = appData.booksvar apiRoutes = express.Router()
apiRoutes.get('/books', function(req, res){res.json({data: books})
})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如下
// main.js// 导入Vue,这个是必需的,在使用Vue之前,必须先导入
import Vue from 'vue'// 导入 vue-router,并使用
import VueRouter from 'vue-router'
Vue.use(VueRouter)// 导入 vue-resource,并使用
import VueResource from 'vue-resource'
Vue.use(VueResource)// 导入 pages 下的 Home.vue 
import Home from './pages/Home'
import Detail from './pages/Detail'// 定义路由配置
const routes = [{path: '/',component: Home},{path: '/detail',component: Detail}
]// 创建路由实例
const router = new VueRouter({routes
})// 创建 Vue 实例
new Vue({el: '#app',data(){return {transitionName: 'slide'}},router,watch: {// 监视路由,参数为要目标路由和当前页面的路由'$route' (to, from){const toDepth = to.path.substring(0, to.path.length-2).split('/').length// 官方给出的例子为 const toDepth = to.path.split('/').length 由于现在只有两个路由路径'/'和'/detail'// 按照官方给的例子,这两个路由路径深度都为 2 ,所以,这里稍作调整,不知道有什么不妥// 但目前在这个demo中能正常运行,如果知道更好的方法,欢迎留言赐教const fromDepth = from.path.substring(0, from.path.length-2).split('/').lengththis.transitionName = toDepth < fromDepth ? 'slide_back' : 'slide'// 根据路由深度,来判断是该从右侧进入还是该从左侧进入}}
})

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

Home.vue修改如下:
<!-- Home.vue -->
<template><div class="container"><!-- 由于html不区分大小写,所以js中驼峰命名方式在html中要改成用短横线连接的形式 --><home-header></home-header><div class="content"><ul class="cont_ul"><listv-for="item in items":price="item.price":title="item.title":img="item.img"><!-- 通过v-bind(简写为“:”)绑定props来从父组件给子组件传值 --></list></ul></div></div>
</template>
<style>.container {max-width: 640px;margin: 0 auto;overflow-x: hidden;}.cont_ul {padding-top: 0.05rem;margin: 0 -0.12rem;}.cont_ul:after {content: "";display: block;width: 0;height: 0;clear: both;}
</style>
<script>// 导入要用到的子组件import HomeHeader from '../components/HomeHeader'import List from '../components/List'export default {data () {return {items: []}},// 在components字段中,包含导入的子组件components: {HomeHeader,List},// 在组件创建完成时,执行的钩子函数created (){// 在main.js里导入并使用vue-resource之后,就可以通过this.$http来使用vue-resource了,这里我们用到了get方法this.$http.get('/api/books').then((data) => {// 由于请求成功返回的是Promise对象,我们要从data.body.data拿到books数组this.items = data.body.data;})}}
</script>

List.vue修改如下:
<!-- List.vue -->
<template><li class="sec_li"><router-link to="/detail" class="lp_li_a"><div class="lp_li_imgWrap"><img :src="img" alt=""></div><p class="lp_li_name">{{ title }}</p><p class="lp_li_price">¥{{ price }}元</p></router-link></li>
</template><style scoped>.sec_li {float: left;width: 50%;margin-bottom: 0.1rem;}.lp_li_a {display: block;padding: 0.3rem 0;margin: 0 0.05rem;text-align: center;background: #fff;}.lp_li_imgWrap {padding: 0.24rem 0;}.lp_li_imgWrap > img {width: auto;height: 2.3rem;}.lp_li_name {height: 0.5rem;line-height: 0.5rem;font-size: 16px;color: #333;}.lp_li_price {height: 0.5rem;line-height: 0.5rem;font-size: 16px;color: #fb3b3b;}
</style><script>export default {// 接收父组件传过来的以下几个属性props: ['price', 'title', 'img'],}
</script>

然后,再回到浏览器,应该会看到如下图的效果了。




搞定!数据成功接入,可以来杯咖啡放松一下,回味一下整个过程的实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

controller如何保证当前只有一个线程执行_聊聊Spring线程安全,读完之后,大部分程序员收藏了......

Spring作为一个IOC/DI容器&#xff0c;帮助我们管理了许许多多的“bean”。但其实&#xff0c;Spring并没有保证这些对象的线程安全&#xff0c;需要由开发者自己编写解决线程安全问题的代码。Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例…

.NET Core 使用 grpc 实现微服务

GRPC 是Google发布的一个开源、高性能、通用RPC&#xff08;Remote Procedure Call&#xff09;框架。提供跨语言、跨平台支持。以下以一个.NET Core Console项目演示如何使用GRPC框架。 一、定义服务 通过proto定义一个数学计算服务&#xff0c;其中包括两个服务方法&#xff…

范式 第一 第二 第三范式

第一范式&#xff08;每个数据项不可分&#xff09; 如果一个关系模式R的所有属性都是不可分的基本数据项&#xff0c;则R∈1NF&#xff08;即R符合第一范式&#xff09;。 第二范式 &#xff08;没有部分依赖&#xff09; 若关系模式R∈1NF&#xff08;即R符合第一范式&a…

Vue.js2.0开发环境搭建(四)

转载自 vuejs2.0从入门到放弃--入门实例&#xff08;四&#xff09;最近&#xff0c;很多小伙伴有疑惑&#xff0c;想学vuejs必须先了解复杂的构建工具和命令行操作吗&#xff01;&#xff01;答案是否定的&#xff01; 对于很多做前端的同学&#xff0c;涉及到命令行和构建工…

微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...

首先在我们可以直接写到需要的 page 中&#xff0c;然后再进行抽取组件&#xff0c;自定义组件建议wxzx-xxx命名例如&#xff0c;我们封装的组件名为 **wxzx-loadmorewxzx-loadmore.wxml正在加载{{tip}}这里就是把index.wxml中的需要封装成组件的代码原样copy过来wxzx-loadmore…

[公测]微信小程序设计指南文档

微信小程序开放了。不要在意名额&#xff0c;一定要加大专注度。并保持良好的想法以及意识&#xff0c;扩大认知范围&#xff0c;这样才能占得先机。程序上的事我不懂&#xff0c;设计文档还是有必要看一看。文档并没有讲如何更漂亮。只是从人性化的角度去讲&#xff0c;如何让…

多线程----join插队

package com.kuang.demo05; public class TestJoin implements Runnable {Overridepublic void run() {for (int i 0; i <10 ; i) {System.out.println("VIP线程来插队了&#xff01;&#xff01;&#xff01;"i);}}public static void main(String[] args) thro…

联通 培训 c班还 20190814

看我的ppt是没有很多文字的 文字都在心里 电脑比较旧 可以装一个Linux 还能用 还是装xp把 电脑旧可以在咸鱼上买一个ssd&#xff0c;还能用很久。 Linux 目录每个用户都一样 不可以修改 ps -ef | sudo service sudo 授权 一般都是普通用户 docker 启动就类似模拟…

Vue开源项目库汇总

转载自 Vue开源项目库汇总最近做了一个Vue开源项目库汇总&#xff0c;里面集合了OpenDigg 上的优质的Vue开源项目库&#xff0c;方便移动开发人员便捷的找到自己需要的项目工具等&#xff0c;感兴趣的可以到GitHub上给个star。 UI组件 element ★9305 - 饿了么出品的Vue2的web…

PL/SQL经典练习

/* PL/SQL编程*/--先把scott里面的表弄到test表空间里面来 CREATE TABLE EMP ASSELECT * FROM SCOTT.EMP; CREATE TABLE DEPT ASSELECT * FROM SCOTT.DEPT; /* 上机1 */ --&#xff08;1&#xff09;计算King所交税金DECLARE V_SHUIJIN NUMBER; --应交税金V_SA…

alertmanager 告警恢复_Prometheus配置企业微信告警

kubernetes operator安装的&#xff0c;如果不会可看上一篇文章前提&#xff1a;创建企业微信&#xff0c;创建应用然后配置altermanager.yamlglobal:resolve_timeout: 5m receivers: - name: wechatwechat_configs:- agent_id: "100000x"api_secret: Nm7PRrxxxxG8Ep…

IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API。 使用IdentityServer4 来实现使用客户端凭据保护ASP.NET Core Web API 访问。 IdentityServer4 GitHub: https://github.com/IdentityServer/IdentityServer4 IdentityServer 框架支持以下功能&…

JAVA多线程总结(笔记)

线程的特点 线程就是独立的执行路径&#xff1b;在线程运行时&#xff0c;即使没有自己创建线程&#xff0c;后台也会有多个线程&#xff0c;如主线程&#xff0c;gc线程&#xff1b;main()称之为主线程&#xff0c;为系统的入口&#xff0c;用于执行整个程序&#xff1b;在一…

很有道理的内容

男生选女朋友最看重的是什么? 病毒营销陈轩 被赞同30万&#xff0c;被收藏24万&#xff0c;顶级病毒营销专家&#xff0c;加个人微信送书 12,540 人也赞同了该回答 有女孩给我发私信&#xff1a; “我是个很好的女孩&#xff0c;漂亮身材好&#xff0c;白领一枚&#xff0c…

学python后做什么工作好_学习完Python课程后可以做什么工作?

Python作为人工智能、大数据的首选编程语言&#xff0c;也是进入编程世界的理想选择&#xff0c;已经成为了大家都在追求学习的语言&#xff0c;那么学习Python之后到底可以做什么呢?为您详细的介绍一下。什么是Python?Python是一种面向对象解释型计算机程序设计语言。而且Py…

vue-beauty 的v-data-table数据单元不换行

原因由于css样式 .ant-table-tbody>tr>td, .ant-table-thead>tr>th {padding: 16px 8px;word-break: keep-all;white-space: nowrap; /*强制不换行*/ } 只需覆盖white-space的值就可以 如&#xff1a; .ant-table-tbody>tr>td {white-space:normal } 补…

用Middleware给ASP.NET Core Web API添加自己的授权验证

Web API&#xff0c;是一个能让前后端分离、解放前后端生产力的好东西。不过大部分公司应该都没能做到完全的前后端分离。API的实现方式有很 多&#xff0c;可以用ASP.NET Core、也可以用ASP.NET Web API、ASP.NET MVC、NancyFx等。说到Web API&#xff0c;不同的人有不同的做法…

公司电脑重装经验 ThinkPad E480 win7重装 电脑重装

***************************下面是20200813更新的****************************** 1.电脑的机械盘老是掉线 要重启才能找到 不用了 还是用自己的移动硬盘代替公司的D盘吧 拷贝也很慢 2.公司的c盘菜120G太小 就只安装必须使用的软件 外接移动硬盘代替电脑的D盘 可以用…

Java 内存泄露以及避免方法

转载自 Java 内存泄露以及避免方法 内存泄露: 是指在程序运行过程中会不断的分配内存空间&#xff0c;那些不再使用的内存空间应该即时回收它们&#xff0c;从而保证可以保证系统可以再次使用这些内存。如果存在无用的内存没有被收回来&#xff0c;那就是内存泄露。 说明…

Tomacat乱码解决

解决方法 解决后