vue,一路走来(3)--数据交互vue-resource
所有的静态页面布局完成后,最重要的就是数据交互了,简单来说,vue-resource就像jquery里的$.ajax,用来和后台交互数据的。放在created或ready里运行来获取或者更新数据的。不过,vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios(可自行去了解)。但我在项目中用的是vue-resource,下面就来讲一下过程中遇到的问题吧!
vue-resource(数据交互)
1.先安装 cnpm install vue-resource --save
然后在main.js中引入:
import VueResource from 'vue-resource'
Vue.use(VueResource)
// 基于全局Vue对象使用http
Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
// 在一个Vue实例内使用$http
this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);
this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
then方法的回调函数也有两种写法,第一种是传统的函数写法,第二种是更为简洁的ES 6的Lambda写法:
// 传统写法
this.$http.get('/someUrl', [options]).then(function(response){
// 响应成功回调
}, function(response){
// 响应错误回调
});
// Lambda写法
this.$http.get('/someUrl', [options]).then((response) => {
// 响应成功回调
}, (response) => {
// 响应错误回调
});
如:get请求数据
this.$http.get(this._getUrl()+"Index/getApprovedCount/id/" + id).then((res)=>{
let provedCount = res.body;
if(provedCount.error_code == ){
this.getCount = provedCount.count;
}
});
如:post提交数据
collectaction(){
let newsid = this.$route.params.id;
this.$http.post(this._getUrl()+"MyActivities/addFavorite",
{"newsid":newsid},{emulateJSON:true}
).then((res)=>{
let collect = res.body;
if(collect.error_code == ){
Toast({
message:'操作成功'
})
this.getCount = parseInt(this.getCount) + ;
}else{
Toast({
message:'操作失败'
})
}
})
},
emulateJSON的作用
如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。启用该选项后,请求会以application/x-www-form-urlencoded作为MIME type,就像普通的HTML表单一样。
Vue.http.options.emulateJSON = true;
在使用的时候遇到一个小坑,这个$http请求和jquery的ajax还是有点区别,这里的post的data默认不是以form data的形式,而是request payload。解决起来也很简单,将emulateJSON 属性设置为true即可。
在本地发送API接口请求,遇到跨域问题
后台用了Nginx代理,后面看到有人分享说Vue.js的webpack模板中自带了一个代理

还遇到了因为vue-resource是异步操作,无法实现函数调用直接return出来。
showCard(){
if(this.card_num == null || this.card_num == ""){return "";}
this.$http.get("./static/json/bankData.json",{},).then((res)=>{
var bankBin = ;
var isFind = false;
for(var key = ;key >= ;key--){
bankBin = this.card_num.substring(,key);
for(var i in res.body){
if(res.body[i].bin == bankBin){
isFind = true;
return res.body[i].bankName.split("-")[0];
}
}
if(isFind){break;}
}
if(!isFind){return "未知发卡银行";}
})
},
getCard(){
console.log(this.showCard()); //undefined
},
后面只能通过赋值直接输出了,
showCard(){
if(this.card_num == null || this.card_num == ""){return this.bank="";}
this.$http.get("./static/json/bankData.json",{},).then((res)=>{
var bankBin = ;
var isFind = false;
for(var key = ;key >= ;key--){
bankBin = this.card_num.substring(,key);
for(var i in res.body){
if(res.body[i].bin == bankBin){
isFind = true;
return this.bank=res.body[i].bankName.split("-")[0];
}
}
if(isFind){break;}
}
if(!isFind){return this.bank="未知发卡银行";}
})
}
<div class="card-num">
<span>银行卡号</span>
<input type="number" v-model="card_num" v-on:blur="showCard()">
<p>{{this.bank}}</p>
</div>
说到这,随便提及一下,刚好做了填写银行卡识别出相应的银行,http://download.csdn.net/detail/cb511612371/9176105
后面学习了ES6的Promise的基本用法,换了一种简单的方法。
function read( content ) {
return new Promise(function( resolve,reject ) {
setTimeout(function(){
if(content>){
resolve(content)
}else{
reject('小于4')
}
},)
})
}
read().then(( data )=>{
console.log(data)
},( err )=>{
console.log(err) //小于4
return read() //将状态改为了失败
})
.then(( data )=>{
console.log('data',data)
},( err )=>{
console.log(err) //小于4
})
vue,一路走来(3)--数据交互vue-resource的更多相关文章
- vue,一路走来(17)--vue使用scss,并且全局引入公共scss样式
最近朋友问如何在vue项目中使用scss样式,想起之前项目是直接在main.js直接import css文件的,然而main.js不可以直接import scss文件. import './asset ...
- vue,一路走来(13)--vue微信分享
vue微信分享 今天记录一下vue微信分享. 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.这个不多说,见文档,只有绑定了才能进行下一步的动作 2.需要引入js文件 ...
- Vue中独立组件之间数据交互
独立组件之间数据交互:通过自定义事件 组件A中的[数据],传递给组件B 1.创建组件A,组件B 2.组件B在实例创建完成时就开始监听事件[等待接收数据]:钩子 3.组件A中触发事件,发送数据 注意:接 ...
- vue,一路走来(1)--构建vue项目
2016年12月--2017年5月,接触前端框架vue,一路走来,觉得有必要把遇到的问题记录下来. 那时,vux用的是1.0的vue,然而vue2.0已经出来了,于是我结合了mint-ui一起来做项目 ...
- 04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
- vue,一路走来(7)--响应路由参数的变化
今天描述的问题估计会有很多人也遇到过. vue-router多个路由地址绑定一个组件造成created不执行 也就是文档描述的,如下图 我的解决方案: created () { console.log ...
- vue,一路走来(16)--本地及手机调试
闲暇时间记录一下如何绑定域名,实现本地及手机调试的过程.我的是微信开发项目,很多功能及操作都是基于微信来开发的,理所当然的就用到微信开发者工具了. 1.首先打开目录C:\Windows\System3 ...
- vue,一路走来(12)--父与子之间传参
今天想起一直没有记录父组件与子组件的传参问题,这在项目中一直用到. 父向子组件传参 Index.vue父组件中 <component-a :msgfromfa="(positionno ...
- vue,一路走来(6)--微信支付
微信支付 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 分享一下vue实现微信支付.在微信浏览器里面 ...
随机推荐
- springboot+thymeleaf 访问静态资源解决(static)
---------------------------------------2.1.3-------------------------------------------------------- ...
- Eclipse 创建springBoot项目的时候需要首先 安装STS(亲测)
开始我的Eclipse版本是4.4.2.安装网上的步骤多次不成功. 后来直接去下载了最新版的Eclipse 2018-9版本的 是 4.9. 下面是安装步骤: (1)eclipse->Help- ...
- JS一些概念知识及参考链接
1.setTimeout.setInterval.promise.宏任务.微任务 先执行宏任务整体 script 同步代码,然后遇到 setTimeout 或者 setInterval 即放到宏任务队 ...
- ckeditor粘贴word图片且图片文件自动上传功能
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
写一个vue表单验证插件(vue-validate-easy) 需求 目标:简单易用可扩展 如何简单 开发者要做的 写了一个表单,指定一个name,指定其验证规则. 调用提交表单方法,可以获取验证成功 ...
- webApp 页面布局
1. 流式布局 概念:流式布局是页面元素宽度按照屏幕分辨率进行适配调整,但是整体布局不变. 设计方法:布局都是通过百分比来定义宽度,但是高度大都是用px固定的. 弊端: 虽然可以让各种屏幕适配,但是显 ...
- 【Pytest】python单元测试框架pytest简介
1.Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍 ...
- MatrixTraceTransform主要逻辑在transform方法中
@Override public void transform(TransformInvocation transformInvocation) throws TransformException, ...
- IntelliJ IDEA最新版配置Tomcat(完整版教程)
查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...
- web服务器、WSGI跟Flask(等框架)之间的关系
之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTT ...