laravel vue控制元件通過axios向api發起請求,獲取分頁例項物件reponse.data.data
阿新 • • 發佈:2018-12-26
問題:在vue中獲取分頁例項物件中的具體例項物件的時候需要使用reponse.data.data,為什麼需要呼叫兩次data呢?請看下文
一、什麼是Axios
在文件中我們可知,Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。
其擁有如下特點:
二、在vue中發起請求首先需要在應用vue的頁面中註冊axios,比如註冊到頁面引入的js檔案中,註冊程式碼如下:
Vue.prototype.$http = window.axios;
然後就可以在vue中發起請求了:
window.axios.post('api_url').then(function(response){ console.log(reponse); }
三、api返回資料
$users = User::orderBy('id')->paginate(5); return $users;四、處理響應的資料
axios對響應的資料的處理,寫在.then方法的閉包函式內,如上文中我們將返回的資料列印輸出在控制檯。
控制檯列印如下:
首先,我們得知這是一個object物件
然後我們將其展開來看:
也就是說,reponse是以json形式返回的,其中包括了響應的各種屬性:配置、資料內容(data)
細看data(第一層data)這一個屬性,我們可以得知此時其中裝了一個obejct
觀察發現是我們api返回的分頁物件例項。
Laravel文件中提到,”the paginator instances are iterators and may be looped as an array“,也就是說,分頁例項物件本身是可以直接參與迴圈,直接在blade中輸出詳細內容。
但是此時我們在vue中,需要將具體內容取出來,賦值給變數而非直接渲染輸出,就需要準確逐層取值。
paginate例項物件,其屬性包含:
因為data屬性裡面裝的是物件陣列,我們要獲取返回的user物件的資料,就需要取其的data屬性(第二層data):{ "total": , "per_page": , "current_page": , "last_page": , "first_page_url": "", "last_page_url": "", "next_page_url": "", "prev_page_url": null, "path": "", "from": , "to": , "data":[ { // Result Object }, { // Result Object } ] }
vm.users = response.data.data;