老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

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

小編給大家分享一下Vue.js中vue-resource的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)是專業(yè)的渾源網(wǎng)站建設(shè)公司,渾源接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行渾源網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

vue-resource特點(diǎn)

vue-resource插件具有以下特點(diǎn):

1. 體積小

vue-resource非常小巧,在壓縮以后只有大約12KB,服務(wù)端啟用gzip壓縮后只有4.5KB大小,這遠(yuǎn)比jQuery的體積要小得多。

2. 支持主流的瀏覽器

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

3. 支持Promise API和URI Templates

Promise是ES6的特性,Promise的中文含義為“先知”,Promise對(duì)象用于異步計(jì)算。

URI Templates表示URI模板,有些類似于ASP.NET MVC的路由模板。

4. 支持?jǐn)r截器

攔截器是全局的,攔截器可以在請(qǐng)求發(fā)送前和發(fā)送請(qǐng)求后做一些處理。

攔截器在一些場(chǎng)景下會(huì)非常有用,比如請(qǐng)求發(fā)送前在headers中設(shè)置access_token,或者在請(qǐng)求失敗時(shí),提供共通的處理方式。

vue-resource使用

引入vue-resource


基本語(yǔ)法

引入vue-resource后,可以基于全局的Vue對(duì)象使用http,也可以基于某個(gè)Vue實(shí)例使用http。

// 基于全局Vue對(duì)象使用http
Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

// 在一個(gè)Vue實(shí)例內(nèi)使用$http
this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);
this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

在發(fā)送請(qǐng)求后,使用then方法來(lái)處理響應(yīng)結(jié)果,then方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是響應(yīng)成功時(shí)的回調(diào)函數(shù),第二個(gè)參數(shù)是響應(yīng)失敗時(shí)的回調(diào)函數(shù)。

then方法的回調(diào)函數(shù)也有兩種寫法,第一種是傳統(tǒng)的函數(shù)寫法,第二種是更為簡(jiǎn)潔的ES 6的Lambda寫法:

// 傳統(tǒng)寫法
this.$http.get('/someUrl', [options]).then(function(response){
  // 響應(yīng)成功回調(diào)
}, function(response){
  // 響應(yīng)錯(cuò)誤回調(diào)
});


// Lambda寫法
this.$http.get('/someUrl', [options]).then((response) => {
  // 響應(yīng)成功回調(diào)
}, (response) => {
  // 響應(yīng)錯(cuò)誤回調(diào)
});

PS:做過.NET開發(fā)的人想必對(duì)Lambda寫法有一種熟悉的感覺。

支持的HTTP方法

vue-resource的請(qǐng)求API是按照REST風(fēng)格設(shè)計(jì)的,它提供了7種請(qǐng)求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名稱是標(biāo)準(zhǔn)的HTTP方法。當(dāng)服務(wù)端使用REST API時(shí),客戶端的編碼風(fēng)格和服務(wù)端的編碼風(fēng)格近乎一致,這可以減少前端和后端開發(fā)人員的溝通成本。

客戶端請(qǐng)求方法服務(wù)端處理方法
this.$http.get(...)Getxxx
this.$http.post(...)Postxxx
this.$http.put(...)Putxxx
this.$http.delete(...)Deletexxx

options對(duì)象

發(fā)送請(qǐng)求時(shí)的options選項(xiàng)對(duì)象包含以下屬性:

參數(shù)類型描述
urlstring請(qǐng)求的URL
methodstring請(qǐng)求的HTTP方法,例如:'GET', 'POST'或其他HTTP方法
bodyObject, FormData stringrequest body
paramsObject請(qǐng)求的URL參數(shù)對(duì)象
headersObjectrequest header
timeoutnumber單位為毫秒的請(qǐng)求超時(shí)時(shí)間 (0 表示無(wú)超時(shí)時(shí)間)
beforefunction(request)請(qǐng)求發(fā)送前的處理函數(shù),類似于jQuery的beforeSend函數(shù)
progressfunction(event)ProgressEvent回調(diào)處理函數(shù)
credentialsboolean表示跨域請(qǐng)求時(shí)是否需要使用憑證
emulateHTTPboolean發(fā)送PUT, PATCH, DELETE請(qǐng)求時(shí)以HTTP POST的方式發(fā)送,并設(shè)置請(qǐng)求頭的X-HTTP-Method-Override
emulateJSONboolean將request body以application/x-www-form-urlencoded content type發(fā)送

emulateHTTP的作用

如果Web服務(wù)器無(wú)法處理PUT, PATCH和DELETE這種REST風(fēng)格的請(qǐng)求,你可以啟用enulateHTTP現(xiàn)象。啟用該選項(xiàng)后,請(qǐng)求會(huì)以普通的POST方法發(fā)出,并且HTTP頭信息的X-HTTP-Method-Override屬性會(huì)設(shè)置為實(shí)際的HTTP方法。

Vue.http.options.emulateHTTP = true;

emulateJSON的作用

如果Web服務(wù)器無(wú)法處理編碼為application/json的請(qǐng)求,你可以啟用emulateJSON選項(xiàng)。啟用該選項(xiàng)后,請(qǐng)求會(huì)以application/x-www-form-urlencoded作為MIME type,就像普通的HTML表單一樣。

Vue.http.options.emulateJSON = true;

response對(duì)象

response對(duì)象包含以下屬性:

方法類型描述
text()string以string形式返回response body
json()Object以JSON對(duì)象形式返回response body
blob()Blob以二進(jìn)制形式返回response body
屬性類型描述
okboolean響應(yīng)的HTTP狀態(tài)碼在200~299之間時(shí),該屬性為true
statusnumber響應(yīng)的HTTP狀態(tài)碼
statusTextstring響應(yīng)的狀態(tài)文本
headersObject響應(yīng)頭

注意:本文的vue-resource版本為v0.9.3,如果你使用的是v0.9.0以前的版本,response對(duì)象是沒有json(), blob(), text()這些方法的。

CURD示例

提示:以下示例仍然沿用上一篇的組件和WebAPI,組件的代碼和頁(yè)面HTML代碼我就不再貼出來(lái)了。

GET請(qǐng)求

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只在響應(yīng)失敗時(shí)調(diào)用,而catch則是在整個(gè)請(qǐng)求到響應(yīng)過程中,只要程序出錯(cuò)了就會(huì)被調(diào)用。

在then方法的回調(diào)函數(shù)內(nèi),你也可以直接使用this,this仍然是指向Vue實(shí)例的:

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

為了減少作用域鏈的搜索,建議使用一個(gè)局部變量來(lái)接收this。

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

 JSONP請(qǐng)求

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

POST請(qǐng)求

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請(qǐng)求

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

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

Delete請(qǐng)求

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


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

使用resource服務(wù)

vue-resource提供了另外一種方式訪問HTTP——resource服務(wù),resource服務(wù)包含以下幾種默認(rèn)的action:

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

resource對(duì)象也有兩種訪問方式:

  • 全局訪問:Vue.resource

  • 實(shí)例訪問:this.$resource

resource可以結(jié)合URI Template一起使用,以下示例的apiUrl都設(shè)置為{/id}了:

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

GET請(qǐng)求

使用get方法發(fā)送GET請(qǐng)求,下面這個(gè)請(qǐng)求沒有指定{/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請(qǐng)求

使用save方法發(fā)送POST請(qǐng)求,下面這個(gè)請(qǐng)求沒有指定{/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請(qǐng)求

使用update方法發(fā)送PUT請(qǐng)求,下面這個(gè)請(qǐng)求指定了{(lán)/id}。

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

{/id}相當(dāng)于一個(gè)占位符,當(dāng)傳入實(shí)際的參數(shù)時(shí)該占位符會(huì)被替換。

例如,{ id: vm.item.customerId}中的vm.item.customerId為12,那么發(fā)送的請(qǐng)求URL為:

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

 DELETE請(qǐng)求

使用remove或delete方法發(fā)送DELETE請(qǐng)求,下面這個(gè)請(qǐng)求指定了{(lán)/id}。

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

 使用inteceptor

攔截器可以在請(qǐng)求發(fā)送前和發(fā)送請(qǐng)求后做一些處理。

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

基本用法

Vue.http.interceptors.push((request, next) => {
    // ...
    // 請(qǐng)求發(fā)送前的處理邏輯
    // ...
  next((response) => {
    // ...
    // 請(qǐng)求發(fā)送后的處理邏輯
    // ...
    // 根據(jù)請(qǐng)求的狀態(tài),response參數(shù)會(huì)返回給successCallback或errorCallback
    return response
  })
})

在response返回給successCallback或errorCallback之前,你可以修改response中的內(nèi)容,或做一些處理。

例如,響應(yīng)的狀態(tài)碼如果是404,你可以顯示友好的404界面。

如果不想使用Lambda函數(shù)寫法,可以用平民寫法:

Vue.http.interceptors.push(function(request, next) {
  // ...
  // 請(qǐng)求發(fā)送前的處理邏輯
  // ...
  next(function(response) {
    // ...
    // 請(qǐng)求發(fā)送后的處理邏輯
    // ...
    // 根據(jù)請(qǐng)求的狀態(tài),response參數(shù)會(huì)返回給successCallback或errorCallback
    return response
  })
})

示例1

之前的CURD示例有一處用戶體驗(yàn)不太好,用戶在使用一些功能的時(shí)候如果網(wǎng)絡(luò)較慢,畫面又沒有給出反饋,用戶是不知道他的操作是成功還是失敗的,他也不知道是否該繼續(xù)等待。

通過inteceptor,我們可以為所有的請(qǐng)求處理加一個(gè)loading:請(qǐng)求發(fā)送前顯示loading,接收響應(yīng)后隱藏loading。

具體步驟如下:

1.添加一個(gè)loading組件


  
    
      
      
      
       

2.將loading組件作為另外一個(gè)Vue實(shí)例的子組件

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

3.將該Vue實(shí)例掛載到某個(gè)HTML元素


  

4.添加inteceptor

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

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

示例2

當(dāng)用戶在畫面上停留時(shí)間太久時(shí),畫面數(shù)據(jù)可能已經(jīng)不是最新的了,這時(shí)如果用戶刪除或修改某一條數(shù)據(jù),如果這條數(shù)據(jù)已經(jīng)被其他用戶刪除了,服務(wù)器會(huì)反饋一個(gè)404的錯(cuò)誤,但由于我們的put和delete請(qǐng)求沒有處理errorCallback,所以用戶是不知道他的操作是成功還是失敗了。

你問我為什么不在每個(gè)請(qǐng)求里面處理errorCallback,這是因?yàn)槲冶容^懶。這個(gè)問題,同樣也可以通過inteceptor解決。

1. 繼續(xù)沿用上面的loading組件,在#help元素下加一個(gè)對(duì)話框


  
  
    
      Server Error
    
    
      Oops,server has got some errors, error code: {{errorCode}}.

       

2.給help實(shí)例的data選項(xiàng)添加兩個(gè)屬性

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的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁(yè)名稱:Vue.js中vue-resource的示例分析
URL網(wǎng)址:http://www.xueling.net.cn/article/pepeci.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 中文字幕乱码日韩 | 龙珠z国语版在线观看 | 激情不卡一区二区三区视频在线 | 视频一区二区三区在线 | 色在线免费观看 | 国产真人做爰视频免费 | 不卡中文字幕在线 | 凹凸69堂国产成人精品 | 台湾男男gay做爽爽的视频 | 成人小视频在线免费观看 | 欧美福利在线 | 明星angelababy造梦视频 | 精品久久久久久国产潘金莲 | 亚洲国产一区二区精品视频 | 青青青草网站免费视频在线观看 | 96av在线| 一个人看的www日本高清视频 | 蜜臀在线一区 | 亚洲午夜一级毛片 | 国产免费亚洲 | 亚洲一级在线 | 国内自产拍自拍A免费毛片 国内精品999 | 高清免费a级在线观看国产 无遮挡边摸边吃奶边做视频免费 | 免费看成年人视频在线观看 | 欧洲精品久久久 | 色欲午夜无码久久久久久 | h视频在线观看网站 | 国内a∨免费播放 | 26uuu久久综合| 欧美日韩成人一区 | 亚洲人成中文字幕在线观看 | 爱妺妺国产AV网站 | 野花社区www高清图片 | 人人妻人人爽人人澡AV | 亚洲久本草在线中文字幕 | 久操一区 | 成人欧美一区二区三区在线播放 | 91社区视频 | 亚洲手机在线人成网站 | 天堂蜜桃一区二区三区 | 国产精品区视频中文字幕 |