后端传递list 前端VUE生成表格 数据未后端传送
时间: 2025-02-02 08:56:43 浏览: 51
### 解决前后端数据传输问题
为了确保前端 Vue 可以正确接收后端传递的列表数据并生成表格,需关注几个方面:
#### 后端配置与接口设计
确保后端服务能够通过 RESTful API 或 GraphQL 接口返回 JSON 数据给前端应用。对于 Spring Boot 应用程序来说,可以在 `application.properties` 文件中设置数据库连接参数[^2]。
```properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/db_example?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456ab
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
```
创建控制器类来处理 HTTP 请求并将查询结果作为响应体发送回客户端。例如,在 Java 中定义一个简单的 GET 方法用于提供用户列表:
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.findAll();
return new ResponseEntity<>(users, HttpStatus.OK);
}
}
```
#### 前端实现
##### 使用 Axios 发起请求
安装 axios 以便于发起 AJAX 调用来获取远程服务器上的资源。在项目根目录下运行命令 `npm install axios --save` 完成依赖项引入工作。
编写 JavaScript 函数调用 `/api/users` 获取所有用户的列表,并将其存储在一个变量里供后续操作使用。
```javascript
import axios from 'axios';
export default function fetchUserData() {
const url = '/api/users';
try {
let response = await axios.get(url);
console.log(response.data); // 打印接收到的数据
return response.data;
} catch (error) {
throw error;
}
}
```
##### 组件内部逻辑调整
考虑到 DOM 更新机制,在组件生命周期钩子函数内利用 `$nextTick()` 来等待视图完成更新后再执行某些特定的操作[^1]。这有助于防止因过早尝试访问尚未反映最新状态变更的节点而导致错误发生。
下面是一个完整的 Vue 单文件组件例子展示如何加载来自后端的服务端渲染好的 HTML 片段以及动态构建表格结构的过程。
```vue
<template>
<div id="user-table">
<table border="1px solid black;">
<thead>
<tr>
<th v-for="(header,index) in headers" :key="index">{{ header }}</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,i) in items" :key="i">
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<!-- 更多字段 -->
</tr>
</tbody>
</table>
</div>
</template>
<script>
import { ref, onMounted } from "vue";
import fetchData from './services/fetchData';
export default {
setup(){
const items = ref([]);
const headers = ["ID", "Name"]; // 表头
async function loadItems(){
items.value = await fetchData();
this.$nextTick(() => {
// 这里的代码将在DOM更新完成后被执行
});
}
onMounted(loadItems);
return{
items,
headers
};
},
};
</script>
```
阅读全文