vue-resource的应用

vue-resource的应用

最近在了解资源的相关加载方式,主要是基于http协议下的资源请求,之前由于用了vue作为前端页面的一个框架,但是处理请求的数据为了较为便捷,还一直停留在jquery中的ajax等方法,在了解vue-resource后,打算采用vue的相关插件,(本来是想自己写原生的ajax来处理的,由于个人一个字懒),不小心找到了vue-resource,发现处理方式挺全面的。所以O(∩_∩)O哈哈~
为了能引入到自己的项目中,就先了解了一下,写在这里望大家参考,并且指正。

简介

vue-resource是vue中的一个插件。如果使用过vue的其他组件应用者会比较更容易理解vue-resource在vue中所处的状态。
简单的来说vue-resource它类似于jquery中的ajax。这个插件是vue.js对于web中利用XMLHttpRequest或JSONP提供请求和响应数据的一个服务。
下面简单的来了解一下vue-resource的相关功能和具体应用。
相关功能
vue-resource
主要特点
支持Promise API 和 URI Templates
支持拦截器在发送请求时或者在请求响应时
体积小完整大小约14kb(压缩后大小5.3kb)
对浏览器的支持程度和vue.js保持一致,支持最新的firefox, safari,Opera 和IE9以上版本

引入方法

这里简单的说说明一下自己所了解的两种应用方式

一(直接应用vue-resource.js)
<script src="vue.js"></script>  //当然在引入vue-resource之前应先引入vue.js
<script src="vue-resource.js"></script>
二(在webpack+vue-router+vue-resource)

当然在该配置下需要安装nodejs,npm管理包,同时配置相关的模块,要引用vue-resource就要在npm管理包中安装,安装命令

npm install vue-resource

在相关配置安装好后就可以引入vue-resource,vue-router具体引入代码

const Vue = require('vue');
const VueRouter = require('vue-router');//引入vue-outer
const VueResource = require('vue-resource');//引入vue-resource

Vue.use(VueRouter);//将vue-router插件用在vue中
Vue.use(VueResource);//vue-resource插件用在vue中

相关方法和属性

vue-resource的请求支持API时候按照REST风格设计的,他提供了7种请求API

get(url,[options])
head(url,[options])
delete(url,[options])
jsonp(url,[options])
post(url,[body],[options])
put(url,[body],[options])
patch(url,[body],[options])

除jsonp外其他的方法名称都是标准的http方法,当服务使用rest API

options对象

参数 类型 描述
url string 请求的url
method string module.exports = abc.def;
body Object Fromquery string request body
params Object 请求的URL参数对象
headers Object request header
timeout number 单位为毫秒的请求超时时间(0表示无超时时间)
before function(request) 请求发送前的处理函数,类似于jQuery的beforeSend函数
progress function(event) ProgressEvent回调处理函数
credientials boolean 表示跨域请求时是否需要使用凭证
emulateHTTP boolean 发送PUT,PATCH,DELETE请求时以http的post方式
emulateJSON boolean 将request body以application/x-www-form-urlencoded content type发送

emulateHTTP的作用
如果web服务器无法处理PUT,PATCH和DELETE这种REST风格的请求,你可以开启用enulateHTTP选项后,请求会以普通的POST方法发出,并且HTTP头信息的x-HTTP-Method-Override属性会设置为实际的HTTP方法。

emulateJSON的作用
如果web服务无法处理编码为application/json的请求,你可以启用emulateJSON选项。启用该选项后,请求会以application/x-www-form-urlencoded作为MIME type,就像普通的HTML表单一样。respones对象包含以下属性

方法 类型 描述
text() string 以string形式返回response body
json() Object 以JSON对象形式返回response body
blob() Blob 以二进制形式返回response body
ok boolean 响应的HTTP 状态码在200-299之间时,该属性为true
status number 响应的HTTP状态吗
statusText string 响应的状态文本
headers Object 响应头

相关应用案例

常见的get和post实例

//get实例
var vm= new Vue({
    el:"#app",
    data:function(){
        return {
            url:"url",
            getdata:"",
        }
    },
    ready:function(){
        this.getdatamethod();
    },
    methods:{
        //普通方式请求
        getdatamethod:function(){
            this.$http.get(this.url)                
            .then((response) => {                    
                this.getdata=response.data                
                }).catch(function(response) {                    
                    console.log(response)                
                })        
            } 
        },
        //参数用json的形式请求
        getdatamethodjson:function(){
            var item={id:1,title:111};
            this.$http.get(this.url,{params:item},{emulateJSON:true})                
            .then((response) => {                    
                this.getdata=response.data                
                }).catch(function(response) {                    
                    console.log(response)                
                })        
            } 
        },
    }
})

post

//用post的形式
var vm= new Vue({
    el:"#app",
    data:function(){
        return {
            url:"url",
            getdata:"",
        }
    },
    ready:function(){
        this.postdatamethod();
    },
    methods:{
        //普通方式请求
        postdatamethod:function(){
            this.$http.post(this.url)                
            .then((response) => {                    
                this.getdata=response.data                
                }).catch(function(response) {                    
                    console.log(response)                
                })        
            } 
        },
        //参数用json的形式请求
        postdatamethodjson:function(){
            var item={id:1,title:111};
            this.$http.post(this.url,item,{emulateJSON:true})                
            .then((response) => {                    
                this.getdata=response.data                
                }).catch(function(response) {                    
                    console.log(response)                
                })        
            } 
        },
    }
})

使用inteceptor
拦截器可以在请求发送前和发送请求后做一些处理
基础用法

Vue.http.interceptors.push(function(request, next) {
    
    // 请求发送前的处理逻辑
    
    next(function(response) {
        // 请求发送后的处理逻辑
        
        return response
    })
})

注意:拦截器是作为一个全局的请求检测拦截,是每个请求请求发送前和结束后都会进行处理,并不是为某一特定的请求所有的,是所有请求共用的,不过要为不同的请求处理不同的拦截逻辑,可以根据request所带信息进行相应的判断,然后处理。
同样在请求之后可以采用response返回的信息进行判断处理。

//eg:
Vue.http.interceptors.push(function(request, next) {
    if(request.url=="1111"&&request.method=="POST"){
        console.log(0000)//处理符合该请求的拦截器
    }else{
        console.log(11111)//处理不符合该请求的拦截器逻辑
    }
    next(function(response) {
        if(response.url=="1111"){
            console.log(2222)//在符合该请求之后处理
        }else{
            console.log(3333)//处理不符合该请求之后的处理
        }
        return response
    })
})

更多参考

http://www.jianshu.com/p/17008a549f55)之前了解的有关webpack+vue构建页面
http://www.bootcdn.cn/vue-resource/)有关vue-resource.js的版本
https://github.com/pagekit/vue-resource/)github上其内容简介

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 一个空虚寂寞的旅客岛村在雪国的温泉旅馆邂逅了艺伎驹子,岛村被纯洁美丽的驹子所吸引,三年三入雪国,与驹子耳鬓厮...
    cloris1900阅读 455评论 0 0
  • 第270天~ 好久你没有出现咯,一点踪迹都没有,我告诉自己这样不出现久咯,或许就可以淡忘些吧!可是,下午看到你在共...
    法斗SEVEN阅读 229评论 0 0
  • 某村长潜逃美国没事干,就开了家私人诊所,放了块牌子在外面,写着 病治好,付$300; 治不好,退$1000。 有个...
    伏羲教育刘琳阅读 220评论 0 0