当前位置: 首页 > news >正文

Vue.js 从入门到实战:用户管理分页表格项目详解

Vue.js 从入门到实战:用户管理分页表格项目详解

本文适合 Vue 初学者,带你从 Vue 基础语法开始,逐步深入到分页表格项目实战,手把手教你用 Vue + Element UI + Axios 打造一个可增删改查的用户管理界面。


一、什么是 Vue.js?

Vue.js 是一套构建用户界面的渐进式 JavaScript 框架,具有以下特点:

  • 轻量级:仅关注视图层,体积小;
  • 响应式:数据变动会自动更新视图;
  • 易上手:语法简单、逻辑清晰;
  • 组件化:适合构建大型单页应用(SPA)。

Vue 非常适合初学者入门前端框架,也是市面上广泛使用的三大主流框架之一(Vue、React、Angular)。


二、Vue 基础知识详解

1. Vue 实例

Vue 应用的核心就是 new Vue({...}),用来创建一个 Vue 实例:

new Vue({el: '#app', // Vue 实例挂载的元素data: {message: 'Hello Vue!'},methods: {sayHi() {alert(this.message)}}
})

所有绑定在页面上的内容(插值、事件、属性)都来源于 datamethods


2. 数据绑定(单向绑定)

Vue 通过插值语法 {{ 变量名 }} 实现数据绑定。

<p>{{ message }}</p>

只要 messagedata 中发生改变,页面内容会自动更新。


3. 事件绑定

使用 v-on 或简写 @ 来绑定事件:

<button @click="sayHi">点我提示</button>

绑定的事件定义在 methods 中,点击按钮时会调用 sayHi 方法。


三、Vue 的双向绑定(重点)

1. 什么是双向绑定?

双向绑定意味着:

  • 数据变化会更新视图;
  • 用户输入也能修改数据。

Vue 使用 v-model 指令实现这种双向绑定,尤其常用于表单元素中。


2. 基本用法

<input v-model="username" placeholder="请输入用户名">
<p>你输入的是:{{ username }}</p>
new Vue({el: '#app',data: {username: ''}
})

当你在输入框中输入时,username 的值自动更新;反之,username 变量变化也会同步更新输入框的内容。


3. 表单双向绑定适配列表

元素说明数据类型
<input type="text">文本输入String
<textarea>多行输入String
<input type="checkbox">多选/布尔值Boolean/Array
<input type="radio">单选String
<select>下拉框String/Array

4. 修饰符(Modifers)

修饰符功能
.lazychange 事件触发时更新数据(失焦后)
.number将输入转为数字
.trim自动去除首尾空格

示例:

<input v-model.lazy="name">
<input v-model.number="age">
<input v-model.trim="email">

四、项目实战:分页用户信息表格管理系统

我们使用 Vue + Element UI + Axios 实现一个从后端分页获取用户数据,并显示到前端表格的项目。


1. 引入依赖

<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="js/vue.js"></script>
<script src="js/elementui.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

2. HTML 页面结构

<div id="app"><el-table :data="array" border stripe><el-table-column fixed prop="id" label="ID" width="260" /><el-table-column prop="username" label="用户名" width="320" /><el-table-column prop="password" label="密码" width="320" /><el-table-column prop="role" label="角色" width="320" /><el-table-column label="操作"><template slot-scope="scope"><el-button size="mini" type="info" icon="el-icon-edit" @click="edit(scope.row)">修改</el-button><el-button size="mini" type="danger" icon="el-icon-delete" @click="del(scope.row)">删除</el-button></template></el-table-column></el-table><el-paginationstyle="margin-top: 20px; float: right;"backgroundlayout="prev, pager, next":page-size="size":total="total":current-page.sync="page"@current-change="change"></el-pagination>
</div>

3. Vue 实例与分页请求逻辑

new Vue({el: '#app',data() {return {array: [],  // 表格数据page: 1,    // 当前页码size: 2,    // 每页显示条数total: 0    // 数据总数(后端返回)}},mounted() {this.loadData(this.page)},methods: {loadData(currentPage) {axios.get(`http://localhost:8080/account/list?page=${currentPage}&size=${this.size}`).then(resp => {this.array = resp.data.recordsthis.total = resp.data.totalthis.page = resp.data.currentthis.size = resp.data.size})},change(currentPage) {this.loadData(currentPage)},edit(row) {alert('修改用户:' + JSON.stringify(row))},del(row) {alert('删除用户:' + JSON.stringify(row))}}
})

五、分页功能详解

分页由 Element UI 的 <el-pagination> 实现,核心是监听 @current-change 事件,并传入当前页码,更新后重新调用后端接口。

<el-pagination:current-page.sync="page"@current-change="change":page-size="size":total="total"layout="prev, pager, next" />

六、后端接口格式说明(配合使用)

后端接口建议返回以下格式 JSON 数据:

{"records": [{ "id": 1, "username": "张三", "password": "123456", "role": "管理员" },{ "id": 2, "username": "李四", "password": "abcdef", "role": "普通用户" }],"total": 11,"current": 1,"size": 2
}

七、项目总结与扩展思路

学到了 Vue 的数据绑定、事件处理、生命周期函数
熟悉了 v-model 的双向绑定机制
掌握了 Element UI 表格与分页控件的基本用法
学会了通过 Axios 获取后端数据并绑定到视图

可扩展功能:

  • 添加用户(表单弹窗)
  • 编辑用户信息(双向绑定表单)
  • 删除用户确认弹窗
  • 多条件搜索过滤
  • 使用组件化方式优化结构
http://www.xdnf.cn/news/1002997.html

相关文章:

  • 新书速览|CUDA并行编程与性能优化
  • Java大厂面试真题:谢飞机的技术挑战
  • 快速排序:分治思想的经典实践
  • 数据结构 - Java 队列
  • react中hook和高阶组件的选型
  • Windows安装docker及使用
  • nginx学习
  • 【Qt】如何使用QtInstallerFramework打包Qt程序
  • OpenCV CUDA模块图像变形------对图像进行上采样操作函数pyrUp()
  • 134. Gas Station
  • 画图使用说明书
  • 使用adb 抓取perfetto-trace的注意事项
  • [Blender] 高质量材质推荐第四弹:25-30号精选纹理资源详解
  • iOS App上线前的安全防线:项目后期如何用Ipa Guard与其他工具完成高效混淆部署
  • 安全-Linux基线核查项点
  • Web APIS Day06
  • 面向对象 设计模式简述(1.创建型模式)
  • 脱离 Kubernetes,基于原生 Spring Cloud + 云 API 的轻量级自管理微服务平台架构设计
  • pikachu靶场通关笔记27 SQL注入10-宽字节注入
  • 网络安全攻防领域证书
  • leetcode 从中序与后序序列 or 从前序与中序序列 构造二叉树 java
  • docker 网络
  • 【MV】key_moments 与 continuous_timeline的编排权衡
  • Git 清理指南:如何从版本库中移除误提交的文件(保留本地文件)
  • 解决数字超出不会自动换行问题
  • HNCTF部分总结复现
  • 力扣刷题——二分查找
  • Android 开发中,Intent 和 Bundle 组件间传递数据的几种方式
  • 基于Node.js的线上教学系统的设计与实现(源码+论文+调试+安装+售后)
  • 如何“下载安转Allure”?