laravel vue控件通过axios向api发起请求,获取分页实例对象reponse.data.data

问题:在vue中获取分页实例对象中的具体实例对象的时候需要使用reponse.data.data,为什么需要调用两次data呢?请看下文


一、什么是Axios

axios文档链接

在文档中我们可知,Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

其拥有如下特点:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF
二、在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)、响应头、请求体、响应状态码、响应结果文本、__proto__。

细看data(第一层data)这一个属性,我们可以得知此时其中装了一个obejct


观察发现是我们api返回的分页对象实例。

Laravel文档中提到,”the paginator instances are iterators and may be looped as an array“,也就是说,分页实例对象本身是可以直接参与循环,直接在blade中输出详细内容。

但是此时我们在vue中,需要将具体内容取出来,赋值给变量而非直接渲染输出,就需要准确逐层取值。

paginate实例对象,其属性包含:

{
   "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
        }
   ]
}

因为data属性里面装的是对象数组,我们要获取返回的user对象的数据,就需要取其的data属性( 第二层data):

vm.users = response.data.data;






### 实现ElementUI表格组件与后端分页结合并支持多选功能 为了使ElementUI中的`<el-table>`组件能够在使用后端分页的情况下支持多选操作,需考虑前端和后端两方面的配置。 #### 前端配置 在Vue项目中集成ElementUI的表格组件时,应确保已引入必要的依赖项如axios用于HTTP请求发送[^2]。对于表格本身而言,要启用多选,则应在模板内加入`selection-column`列定义: ```html <template> <div id="app"> <!-- 定义一个多选表格 --> <el-table ref="multipleTable" :data="tableData.slice((currentPage-1)*pageSize, currentPage*pageSize)" @selection-change="handleSelectionChange" style="width: 100%"> <el-table-column type="selection"></el-table-column> <!-- 多选列 --> <!-- 其他列定义... --> </el-table> <!-- 分页控件 --> <el-pagination background layout="prev, pager, next" :total="totalItems" @current-change="handlePageChange"></el-pagination> </div> </template> ``` 上述代码片段展示了如何构建一个具有分页能力的支持多选的表格,并设置了当选择发生变化(`@selection-change`)或当前页码改变(`@current-change`)时触发相应事件处理器的方法名。 针对跨页全选的需求,在JavaScript部分还需要额外编写逻辑来管理哪些条目已被标记为选定状态。这通常涉及到保存所有可选项的状态列表以及更新视图显示的选择情况: ```javascript <script setup> import axios from "axios"; // ...其他导入语句... const multipleSelection = reactive([]); // 存储被选中的行数据 let allSelectedIds = new Set(); // 记录所有页面上已经被选中的ID集合 function handleSelectionChange(val) { val.forEach(item => { allSelectedIds.add(item.id); }); // 更新本地缓存的选择状态 } async function fetchRemoteData(pageNum=1){ try{ let response = await axios.get(`/api/data?page=${pageNum}`); tableData.splice(0, tableData.length,...response.data.items); totalItems=response.data.total; } catch(error){ console.error('获取远程数据失败', error); } } </script> ``` 此脚本段落说明了怎样监听到用户的选取动作并将这些变化同步至应用程序内部存储之中;同时也包含了发起异步调用来加载新一页的数据集的过程描述。 #### 后端处理 服务器端应当提供API接口供客户端查询特定范围内的记录,并接受来自前端关于所选项目的标识符数组作为参数之一以便执行进一步的操作(比如批量删除)。具体来说,这意味着RESTful API应该能够接收如下形式的POST请求体: ```json { "selected_ids": [id_1,id_2,...], ... } ``` 其中`selected_ids`字段携带了一组整数型数值表示用户希望影响的具体实例的身份编码。而后端服务则负责解析该JSON对象并对数据库作出相应的更改指令。 此外,考虑到性能因素,建议仅传输必要的信息而不是整个实体模型给前端展示层。因此返回的结果集中可能只需要包含那些将在界面上呈现出来的属性即可。 最后值得注意的是,如果应用涉及到了敏感业务流程的话,那么在整个过程中都必须严格遵循安全最佳实践指南来进行开发工作,包括但不限于输入验证、权限控制等方面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值