广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Vue.js中vue-resource的示例分析
  • 957
分享到

Vue.js中vue-resource的示例分析

2024-04-02 19:04:59 957人浏览 独家记忆
摘要

小编给大家分享一下vue.js中Vue-resource的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue-reso

小编给大家分享一下vue.jsVue-resource的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

vue-resource特点

vue-resource插件具有以下特点:

1. 体积小

vue-resource非常小巧,在压缩以后只有大约12KB,服务端启用gzip压缩后只有4.5KB大小,这远比Jquery的体积要小得多。

2. 支持主流的浏览器

和Vue.js一样,vue-resource除了不支持IE 9以下的浏览器,其他主流的浏览器都支持。

3. 支持Promise API和URI Templates

Promise是es6的特性,Promise的中文含义为“先知”,Promise对象用于异步计算。

URI Templates表示URI模板,有些类似于asp.net mvc的路由模板。

4. 支持拦截器

拦截器是全局的,拦截器可以在请求发送前和发送请求后做一些处理。

拦截器在一些场景下会非常有用,比如请求发送前在headers中设置access_token,或者在请求失败时,提供共通的处理方式。

vue-resource使用

引入vue-resource

<script src="js/vue.js"></script>
<script src="js/vue-resource.js"></script>

基本语法

引入vue-resource后,可以基于全局的Vue对象使用Http,也可以基于某个Vue实例使用http。

// 基于全局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方法来处理响应结果,then方法有两个参数,第一个参数是响应成功时的回调函数,第二个参数是响应失败时的回调函数。

then方法的回调函数也有两种写法,第一种是传统的函数写法,第二种是更为简洁的ES 6的Lambda写法:

// 传统写法
this.$http.get('/someUrl', [options]).then(function(response){
  // 响应成功回调
}, function(response){
  // 响应错误回调
});


// Lambda写法
this.$http.get('/someUrl', [options]).then((response) => {
  // 响应成功回调
}, (response) => {
  // 响应错误回调
});

PS:做过.net开发的人想必对Lambda写法有一种熟悉的感觉。

支持的HTTP方法

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以外,另外6种的API名称是标准的HTTP方法。当服务端使用REST API时,客户端的编码风格和服务端的编码风格近乎一致,这可以减少前端后端开发人员的沟通成本。

客户端请求方法服务端处理方法
this.$http.get(...)Getxxx
this.$http.post(...)Postxxx
this.$http.put(...)Putxxx
this.$http.delete(...)Deletexxx

options对象

发送请求时的options选项对象包含以下属性:

参数类型描述
urlstring请求的URL
methodstring请求的HTTP方法,例如:'GET', 'POST'或其他HTTP方法
bodyObject, FORMData stringrequest body
paramsObject请求的URL参数对象
headersObjectrequest header
timeoutnumber单位为毫秒的请求超时时间 (0 表示无超时时间)
beforefunction(request)请求发送前的处理函数,类似于jQuery的beforeSend函数
progressfunction(event)ProgressEvent回调处理函数
credentialsboolean表示跨域请求时是否需要使用凭证
emulateHTTPboolean发送PUT, PATCH, DELETE请求时以HTTP POST的方式发送,并设置请求头的X-HTTP-Method-Override
emulateJSONboolean将request body以application/x-www-form-urlencoded content type发送

emulateHTTP的作用

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

Vue.http.options.emulateHTTP = true;

emulateJSON的作用

如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。启用该选项后,请求会以application/x-www-form-urlencoded作为MIME type,就像普通的html表单一样。

Vue.http.options.emulateJSON = true;

response对象

response对象包含以下属性:

方法类型描述
text()string以string形式返回response body
json()Object以JSON对象形式返回response body
blob()Blob以二进制形式返回response body
属性类型描述
okboolean响应的HTTP状态码在200~299之间时,该属性为true
statusnumber响应的HTTP状态码
statusTextstring响应的状态文本
headersObject响应头

注意:本文的vue-resource版本为v0.9.3,如果你使用的是v0.9.0以前的版本,response对象是没有json(), blob(), text()这些方法的。

CURD示例

提示:以下示例仍然沿用上一篇的组件和webapi,组件的代码和页面HTML代码我就不再贴出来了。

GET请求

var demo = new Vue({
  el: '#app',
  data: {
    gridColumns: ['customerId', 'companyName', 'contactName', 'phone'],
    gridData: [],
    apiUrl: 'http://211.149.193.19:8080/api/customers'
  },
  ready: function() {
    this.getCustomers()
  },
  methods: {
    getCustomers: function() {
      this.$http.get(this.apiUrl)
        .then((response) => {
          this.$set('gridData', response.data)
        })
        .catch(function(response) {
          console.log(response)
        })
    }
  }
})

这段程序的then方法只提供了successCallback,而省略了errorCallback。

catch方法用于捕捉程序的异常,catch方法和errorCallback是不同的,errorCallback只在响应失败时调用,而catch则是在整个请求到响应过程中,只要程序出错了就会被调用。

在then方法的回调函数内,你也可以直接使用this,this仍然是指向Vue实例的:

getCustomers: function() {
  this.$http.get(this.apiUrl)
    .then((response) => {
      this.$set('gridData', response.data)
    })
    .catch(function(response) {
      console.log(response)
    })
}

为了减少作用域链的搜索,建议使用一个局部变量来接收this。

Vue.js中vue-resource的示例分析

 JSONP请求

getCustomers: function() {
  this.$http.jsonp(this.apiUrl).then(function(response){
    this.$set('gridData', response.data)
  })
}

POST请求

var demo = new Vue({
  el: '#app',
  data: {
    show: false,
    gridColumns: [{
      name: 'customerId',
      isKey: true
    }, {
      name: 'companyName'
    }, {
      name: 'contactName'
    }, {
      name: 'phone'
    }],
    gridData: [],
    apiUrl: 'http://211.149.193.19:8080/api/customers',
    item: {}
  },
  ready: function() {
    this.getCustomers()
  },
  methods: {
    closeDialog: function() {
      this.show = false
    },
    getCustomers: function() {
      var vm = this
      vm.$http.get(vm.apiUrl)
        .then((response) => {
          vm.$set('gridData', response.data)
        })
    },
    createCustomer: function() {
      var vm = this
      vm.$http.post(vm.apiUrl, vm.item)
        .then((response) => {
          vm.$set('item', {})
          vm.getCustomers()
        })
      this.show = false
    }
  }
})

Vue.js中vue-resource的示例分析

 PUT请求

updateCustomer: function() {
  var vm = this
  vm.$http.put(this.apiUrl + '/' + vm.item.customerId, vm.item)
    .then((response) => {
      vm.getCustomers()
    })
}

Vue.js中vue-resource的示例分析 

Delete请求

deleteCustomer: function(customer){
  var vm = this
  vm.$http.delete(this.apiUrl + '/' + customer.customerId)
    .then((response) => {
      vm.getCustomers()
    })
}


Vue.js中vue-resource的示例分析

使用resource服务

vue-resource提供了另外一种方式访问HTTP——resource服务,resource服务包含以下几种默认的action:

get: {method: 'GET'},
save: {method: 'POST'},
query: {method: 'GET'},
update: {method: 'PUT'},
remove: {method: 'DELETE'},
delete: {method: 'DELETE'}

resource对象也有两种访问方式:

  • 全局访问:Vue.resource

  • 实例访问:this.$resource

resource可以结合URI Template一起使用,以下示例的apiUrl都设置为{/id}了:

apiUrl: 'http://211.149.193.19:8080/api/customers{/id}'

GET请求

使用get方法发送GET请求,下面这个请求没有指定{/id}。

getCustomers: function() {

  var resource = this.$resource(this.apiUrl)
    vm = this

  resource.get()
    .then((response) => {
      vm.$set('gridData', response.data)
    })
    .catch(function(response) {
      console.log(response)
    })
}

POST请求

使用save方法发送POST请求,下面这个请求没有指定{/id}。

createCustomer: function() {
  var resource = this.$resource(this.apiUrl)
    vm = this
    
  resource.save(vm.apiUrl, vm.item)
    .then((response) => {
      vm.$set('item', {})
      vm.getCustomers()
    })
  this.show = false
}

 PUT请求

使用update方法发送PUT请求,下面这个请求指定了{/id}。

updateCustomer: function() {
  var resource = this.$resource(this.apiUrl)
    vm = this
    
  resource.update({ id: vm.item.customerId}, vm.item)
    .then((response) => {
      vm.getCustomers()
    })
}

{/id}相当于一个占位符,当传入实际的参数时该占位符会被替换。

例如,{ id: vm.item.customerId}中的vm.item.customerId为12,那么发送的请求URL为:

http://211.149.193.19:8080/api/customers/12

 DELETE请求

使用remove或delete方法发送DELETE请求,下面这个请求指定了{/id}。

deleteCustomer: function(customer){
  var resource = this.$resource(this.apiUrl)
    vm = this
    
  resource.remove({ id: customer.customerId})
    .then((response) => {
      vm.getCustomers()
    })
}

 使用inteceptor

拦截器可以在请求发送前和发送请求后做一些处理。

Vue.js中vue-resource的示例分析

基本用法

Vue.http.interceptors.push((request, next) => {
    // ...
    // 请求发送前的处理逻辑
    // ...
  next((response) => {
    // ...
    // 请求发送后的处理逻辑
    // ...
    // 根据请求的状态,response参数会返回给successCallback或errorCallback
    return response
  })
})

在response返回给successCallback或errorCallback之前,你可以修改response中的内容,或做一些处理。

例如,响应的状态码如果是404,你可以显示友好的404界面。

如果不想使用Lambda函数写法,可以用平民写法:

Vue.http.interceptors.push(function(request, next) {
  // ...
  // 请求发送前的处理逻辑
  // ...
  next(function(response) {
    // ...
    // 请求发送后的处理逻辑
    // ...
    // 根据请求的状态,response参数会返回给successCallback或errorCallback
    return response
  })
})

示例1

之前的CURD示例有一处用户体验不太好,用户在使用一些功能的时候如果网络较慢,画面又没有给出反馈,用户是不知道他的操作是成功还是失败的,他也不知道是否该继续等待。

通过inteceptor,我们可以为所有的请求处理加一个loading:请求发送前显示loading,接收响应后隐藏loading。

具体步骤如下:

1.添加一个loading组件

<template id="loading-template">
  <div class="loading-overlay">
    <div class="sk-three-bounce">
      <div class="sk-child sk-bounce1"></div>
      <div class="sk-child sk-bounce2"></div>
      <div class="sk-child sk-bounce3"></div>
    </div>
  </div>
</template>

2.将loading组件作为另外一个Vue实例的子组件

var help = new Vue({
  el: '#help',
  data: {
    showLoading: false
  },
  components: {
    'loading': {
      template: '#loading-template',
    }
  }
})

3.将该Vue实例挂载到某个HTML元素

<div id="help">
  <loading v-show="showLoading"></loading>
</div>

4.添加inteceptor

Vue.http.interceptors.push((request, next) => {
  loading.show = true
  next((response) => {
    loading.show = false
    return response
  });
});

Vue.js中vue-resource的示例分析

示例2

当用户在画面上停留时间太久时,画面数据可能已经不是最新的了,这时如果用户删除或修改某一条数据,如果这条数据已经被其他用户删除了,服务器会反馈一个404的错误,但由于我们的put和delete请求没有处理errorCallback,所以用户是不知道他的操作是成功还是失败了。

你问我为什么不在每个请求里面处理errorCallback,这是因为我比较懒。这个问题,同样也可以通过inteceptor解决。

1. 继续沿用上面的loading组件,在#help元素下加一个对话框

<div id="help">
  <loading v-show="showLoading" ></loading>
  <modal-dialog :show="showDialog">
    <header class="dialog-header" slot="header">
      <h2 class="dialog-title">Server Error</h2>
    </header>
    <div class="dialog-body" slot="body">
      <p class="error">Oops,server has Got some errors, error code: {{errorCode}}.</p>
    </div>
  </modal-dialog>
</div>

2.给help实例的data选项添加两个属性

var help = new Vue({
    el: '#help',
    data: {
      showLoading: false,
      showDialog: false,
      errorCode: ''
    },
    components: {
      'loading': {
        template: '#loading-template',
      }
    }
  })

3.修改inteceptor

Vue.http.interceptors.push((request, next) => {
  help.showLoading = true
  next((response) => {
    if(!response.ok){
      help.errorCode = response.status
      help.showDialog = true
    }
    help.showLoading = false
    return response
  });
});

Vue.js中vue-resource的示例分析

以上是“Vue.js中vue-resource的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: Vue.js中vue-resource的示例分析

本文链接: https://www.lsjlt.com/news/79410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue.js中vue-resource的示例分析
    小编给大家分享一下Vue.js中vue-resource的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue-reso...
    99+
    2022-10-19
  • vue-Resource与后端数据交互的示例分析
    这篇文章主要为大家展示了“vue-Resource与后端数据交互的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-Resource与后端数据交互的...
    99+
    2022-10-19
  • vue.js中Vue-router 2.0基础的示例分析
    这篇文章主要介绍vue.js中Vue-router 2.0基础的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、基础用法:<div id="app...
    99+
    2022-10-19
  • vue前后台数据交互vue-resource文档的示例分析
    这篇文章给大家分享的是有关vue前后台数据交互vue-resource文档的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vue可以构建一个完全不依赖后端服务的应用,同时...
    99+
    2022-10-19
  • Vue.js中组件的示例分析
    这篇文章将为大家详细讲解有关Vue.js中组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是组件?组件使我们能够将 复杂的 应用程序分解成小块。例如,典型...
    99+
    2022-10-19
  • Vue中resource请求格式和万能测试地址的示例分析
    这篇文章主要介绍了Vue中resource请求格式和万能测试地址的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。注意:1.前端服务器...
    99+
    2022-10-19
  • vue中vue-cli的示例分析
    这篇文章将为大家详细讲解有关vue中vue-cli的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文首先,我们来说一下安装的东西吧!处于有头有尾的目的,还是几句...
    99+
    2022-10-19
  • Vue.js中修饰符的示例分析
    这篇文章给大家分享的是有关Vue.js中修饰符的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、v-model的修饰符 v-model 是用于在表单表单元素上...
    99+
    2022-10-19
  • Vue中vuex的示例分析
    这篇文章主要介绍了Vue中vuex的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在 Vue.js 的项目中,如果项目结构简单, 父...
    99+
    2022-10-19
  • Vue中Toast的示例分析
    这篇文章将为大家详细讲解有关Vue中Toast的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、效果图二、说明这类提示框组件我们通常都会直接在 JS 代码中进行...
    99+
    2022-10-19
  • Vue中nextTick的示例分析
    这篇文章主要介绍了Vue中nextTick的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,V...
    99+
    2023-06-14
  • Vue中TodoList的示例分析
    小编给大家分享一下Vue中TodoList的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!<template>  <...
    99+
    2023-06-25
  • vue中.vue文件解析的示例分析
    这篇文章将为大家详细讲解有关vue中.vue文件解析的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue 提供了一个 compiler.parseCompone...
    99+
    2022-10-19
  • Vue.js中基础指令的示例分析
    这篇文章给大家分享的是有关Vue.js中基础指令的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vue.js 是一套构建用户界面的渐进式框架。他自身不是一个全能框架——只...
    99+
    2022-10-19
  • Vue中keep-alive的示例分析
    这篇文章主要为大家展示了“Vue中keep-alive的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中keep-alive的示例分析”这篇文章吧...
    99+
    2022-10-19
  • vue-cli中vuex的示例分析
    这篇文章主要为大家展示了“vue-cli中vuex的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-cli中vuex的示例分析”这篇文章吧。1.v...
    99+
    2022-10-19
  • Vue中插件的示例分析
    这篇文章主要为大家展示了“Vue中插件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中插件的示例分析”这篇文章吧。以上是“Vue中插件的示例分析”这篇文章的所有内容,感谢各位的阅...
    99+
    2023-06-25
  • Vue中组件的示例分析
    这篇文章将为大家详细讲解有关Vue中组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<body>    <div id=&q...
    99+
    2023-06-25
  • Vue中vue-cli安装的示例分析
    这篇文章给大家分享的是有关Vue中vue-cli安装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍Vue-cli是Vue的脚手架工具主要作用:目录结构、本地调试、代...
    99+
    2022-10-19
  • Vue+Webpack+Vue-loader的示例分析
    小编给大家分享一下Vue+Webpack+Vue-loader的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用预处理...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作