Vue前端掛載對象時一些思考


  最近,在Vue前端調試http請求,無論如何如何也是攔截不了某些http請求。場景是這樣的:Java后端組裝好Vue對象,然后送到前端,前端通過id來掛載該Vue對象,而該對象中有上傳文件或者圖片的控件,正是對這些控件的http請求是無法攔截的,所以導致沒發設置請求頭信息。后來經過對這一場景的梳理,有了一些心得,現記錄如下。

  在Vue前端開發時,可以通過id來掛載Vue對象,從而展示界面;要是這種對象都是在前端生成的話,那么處理起來很方便;要是該對象是從后端通過Java組裝生成的並傳輸過來的話,那么有些地方或者是細節方面就需要注意了;現列舉如下,以供后續參考,下面所說的Vue對象都來自后端組裝生成而來。

  (1)在該Vue對象中所有的http請求都不要直接采用axios對象,而是采用this.$http的方式,注意了$http是主工程中Vue的一個全局屬性,可以在主工程中這樣添加:Vue.property.$http = axios;在被掛載的Vue對象為啥要用全局方式this.$http呢?這樣做的好處是方便被主工程的攔截器攔截,同時也可以繼承主工程的請求頭信息;若是直接采用axios對象的話,那么在主工程中是無法攔截的,更沒發繼承主工程的請求頭信息了。

  (2)在該Vue對象中若是需要一些額外的數據,可以通過全局屬性獲取,也可以通過Vue對象的屬性來綁定,最好是通過一個對象的方式來綁定屬性。

  (3)在該Vue對象中若是用到element的upload組件的話,那么該http請求是不會被主工程攔截器所攔截的,並且也不會繼承主工程中的請求頭信息;所以當需要相關的請求頭信息時要買通過全局屬性來獲取,要么通過數據綁定來獲取;建議還是通過數據綁定來處理比較合適,比如說需要請求頭信息,可以在被掛載的Vue對象中建立一個headers屬性,類型為Object,默認值為{},這樣在掛載主工程某個節點時可以通過數據綁定headers屬性來傳給被掛載的Vue對象,以后需要添加請求頭信息,只要在主工程中添加然后綁定給headers屬性就可以了,而被掛載的Vue對象根本就不用感知有哪些請求頭信息,它只負責填充和傳輸。

  此外,在Vue中添加對http的攔截器,可以參考下面示例:

  import axios from 'axios'

  axios.interceptors.request.user(function(config)) {

    // 這里可以進行請求之前的處理

  }

  axios.interceptors.response.user(function(config)) {

    // 這里可以進行響應之后的處理

  }

 

------20191225閃🚶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM