Vue学习记录-接口通信(数据请求)
这一篇,把前两天实践的“数据请求”部分总结一下。从最终的结果来看,配置非常的简单,使用非常的简单,也非常的灵活,同时也存在一个很头疼的问题,这个问题可以解决,但是解释不了(功力尚浅)。
选型
可选项:vue-resource、axios
看官方文档的时候,发现了一个数据请求的组件库,叫vue-resource(https://github.com/pagekit/vue-resource),根据说明,也做了集成,马上就要测试的时候,发现了一句话(具体地方已经忘记了),说“原来的vue-resource因为xxxxxxx,推荐使用axios”。所以呢,没等用上vue-resource,直接换成了axios。
使用axios
1. 安装
npm i axios --save
2. 添加工具类utils/api.js
import axios from 'axios'
import qs from 'qs' // axios 配置
axios.defaults.timeout = 5000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; //POST传参序列化
// axios.interceptors.request.use((config) => {
// if (config.method === 'post') {
// config.data = qs.stringify(config.data);
// }
// return config;
// }, (error) => {
// // _.toast("错误的传参", 'fail');
// return Promise.reject(error);
// }); //返回状态判断
// axios.interceptors.response.use((res) => {
// if (!res.data.success) {
// // _.toast(res.data.msg);
// return Promise.reject(res);
// }
// return res;
// }, (error) => {
// // _.toast("网络异常", 'fail');
// return Promise.reject(error);
// }); export function fetch(url, params) {
return new Promise((resolve, reject) => {
axios.post(url, params)
.then(response => {
resolve(response.data);
}, err => {
reject(err);
})
.catch((error) => {
reject(error)
})
})
} export default {
POST(url, params) {
return fetch(url, params = {});
}
}
3. 具体使用
比如在登录页面,点击登录以后,调取验证接口,步骤如下
1)引入api.js,比如
import api from '../utils/api';
2)调用接口函数,传递参数
api.POST('api/account/login', {username:this.username, password:this.password}).then(data=> {
// 其他处理
});
<template>
<div id="container">
...
<div id="main">
<div id="login">
<div class="form-input">
<span>
<i class="icon input-icon"></i>
</span>
<input class="login-form-input" placeholder="请输入用户名" v-model="username"/>
</div> <div class="form-input form-input-password">
<span>
<i class="icon input-icon"></i>
</span>
<input class="login-form-input" placeholder="请输入密码" type="password" v-model="password"/>
</div>
<div id="login-button">
<Button type="primary" size="large" @click.native="onPressLogin">登 录</Button>
</div>
</div>
</div>
</div>
</template> <script>
...
import api from '../utils/api'; export default {
...
data: function () {
return {
username: null,
password: null,
remember_password: false,
}
},
methods: {
// 登录
onPressLogin: function () {
let param = {
username: this.username,
password: this.password,
}
api.POST('api/home', param).then(data=> {
// 其他处理
});
}
}
}
</script> <style>
...
</style>
最后说说跨域的问题吧
关于跨域访问,我的基础知识还不够,所以解释不了。解决方案写明白,至少能解决问题
修改/ProjectPath/config/index.js
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target: 'http://xx.xx.xx.xxx:xxx/api/', //设置成要调用的接口域名和端口号
changeOrigin: true,
pathRewrite: {
'^/api': '/' //这里的名称就是一个代理名称,叫什么都可以,具体通过API调用的时候,会将这个名字进行替换,
//比如,真正的接口地址是http://1.2.3.4:8/mobile/login
// target就配置成http://1.2.3.4:8/mobile
// 具体调用的时候,就写成/api/login
// 会将api替换成target,即最终调用地址http://1.2.3.4:8/mobile/login
}
}
},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
}
...
}
计划里还有最后一个篇章,关于“状态管理”的,比如“根据登录状态进行判断,显示登录页或者菜单页面”,那就,预知后事如何,待我娓娓道来
Vue学习记录-接口通信(数据请求)的更多相关文章
- vue学习记录⑤(组件通信-父与子)
今天我们看一下组件通信. 经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了. 但这明显还是不够的.一个页面不可能就是个单组件,一般是由多个组件合成的.正因为如此,组件之 ...
- 02 Vue之vue对象属性功能&axios数据请求实现
1.过滤器的声明和使用 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 1 使用Vue.filter()进行全局定义 2 在v ...
- vue学习记录
vue中常用的指令 v-model 双向数据绑定,一般用于表单元素 v-for 对数组或对象进行循环操作,使用的是v-for <!-- 普通循环 --><li v-for=" ...
- Vue学习记录第一篇——Vue入门基础
前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...
- Vue学习记录-画页面
webstorm 因为之前开发ReactNative的时候,选择了webstorm,这回转战Vue,自然还是用它.如果什么也不做的话,打开Vue工程,编辑区域基本上没有语法高亮.怎么办呢? 安装插件( ...
- 【vue】生成接口模拟数据
目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...
- 【原】iOS学习39网络之数据请求
1. HTTP和HTTPS协议 1> URL URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位 ...
- vue学习记录:vue引入,validator验证,数据信息,vuex数据共享
最近在学习vue,关于学习过程中所遇到的问题进行记录,包含vue引入,validator验证,数据信息,vuex数据共享,传值问题记录 1.vue 引入vue vue的大致形式如下: <temp ...
- Vue学习记录(一)
一.引入js文件(直接采用CDN): http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js 二.简单实例: (1)HTML代码: &l ...
随机推荐
- elasticsearch删除索引报错【原】
如果elasticsearch删除索引报错 curl -X DELETE 'http://10.73.26.66:9200/httpd-34-2017.08.15' {"error" ...
- 教你如何修改FireFox打开新标签页(NewTab Page)的行列数
FireFox的打开新建标签页(即NewTab Page)默认只能显示3x3个网站缩略图,这9个自定义的网站,非常方便快捷,什么hao123的弱爆了,本人从未用过此类导航网站,曾经用过的也只是abou ...
- 51Nod 1352 集合计数(扩展欧几里德)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...
- csu 1803(余数分类)
1803: 2016 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 565 Solved: 364[Submit][Status][Web Board ...
- 高屋建瓴之WebMail攻与防
0x01:前言 随着互联网的快速发展,我们的生活与互联网的联系愈加的紧密.各种快捷方便的信息化通信工具渐渐取代了传统的通信方式.微博.QQ.MSN.微信.陌陌, …这样的社交软件和平台已经成为了我们生 ...
- [实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表
写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...
- js:防抖动与节流【转载】
源文:https://blog.csdn.net/crystal6918/article/details/62236730#reply <!DOCTYPE html> <html l ...
- lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函数使用总结
lr_start_timer: 函数的功能: 为了计算时间更加精确,可以用这个函数去掉LR自身的检查点所浪费的时间.如text check and image time Action() { doub ...
- Codeforces Round #496 (Div. 3) F - Berland and the Shortest Paths
F - Berland and the Shortest Paths 思路:还是很好想的,处理出来最短路径图,然后搜k个就好啦. #include<bits/stdc++.h> #defi ...
- poj2243 Knight Moves(BFS)
题目链接 http://poj.org/problem?id=2243 题意 输入8*8国际象棋棋盘上的两颗棋子(a~h表示列,1~8表示行),求马从一颗棋子跳到另一颗棋子需要的最短路径. 思路 使用 ...