HTML part:
<!doctype html>
<html lang="zh">
<head>
<title>Vue利用模态框修改数据</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 内网Vue.js -->
<script src="D:\WebCode\Vue.js"></script>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<!-- UI -->
<!-- 容器 -->
<div id="app" class="container-fluid">
<!-- 展板 -->
<div class="jumbotron">
<h1 class="display-3">人力资源管理</h1>
<p class="lead">表单与表格</p>
</div>
<!-- 表单 -->
<!-- 行 -->
<div class="row">
<!-- 列 -->
<div class="col">
<!--卡片 -->
<div class="card">
<div class="card-body">
<h4 class="card-title">表单</h4>
<div v-show="isshow" class="alert alert-danger" role="alert">
<strong>表单各个字段必须填写!</strong>
</div>
<!-- 输入框 -->
<div class="form-group">
<label for="">姓名</label>
<!-- 绑定名字 -->
<input v-model="name" type="text" class="form-control" name="" id=""
aria-describedby="helpId" placeholder="员工姓名">
</div>
<!-- 下拉框 -->
<div class="form-group">
<label for="">位置</label>
<!-- 绑定位置 -->
<select v-model="job" class="custom-select" name="" id="">
<!-- 通过循环获得值 -->
<option v-for="(item, index) of jobList" :key="index">{{item}}</option>
</select>
</div>
<!-- 单选按钮 -->
<div class="form-group">
<label for="">性别</label>
<div class="row ml-2">
<div class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="gender" class="form-check-input" type="radio" value="男">
男
</label>
</div>
<div class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="gender" class="form-check-input" type="radio" name="" id=""
value=" 女">
女
</label>
</div>
</div>
</div>
<!-- 多选按钮 -->
<div class="form-group">
<label for="">专业技能</label>
<div class="row">
<!-- v-bind:value="data" :value -->
<div v-for="item of skillList" class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="skills" class="form-check-input" type="checkbox"
:value="item">{{item}}
</label>
</div>
</div>
</div>
<!-- 创建按钮 -->
<button @click="add()" type="button" name="" id=""
class="btn btn-primary btn-lg btn-block">创建新员工</button>
</div>
</div>
</div>
<!-- 列 -->
<div class="col">
<!-- 表格 -->
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 15%;">姓名</th>
<th style="width: 15%;">性别</th>
<th style="width: 15%;">职业</th>
<th style="width: 30%;">专业技能</th>
<th style="width: 30%;">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(s ,index) in staffList" :key="index">
<td>{{s.name}}</td>
<td>{{s.gender}}</td>
<td>{{s.job}}</td>
<td>
<!-- 徽章 -->
<span v-for="item of s.skills" v-bind:class="skillsColor[item]"
class="badge badge-pill ">{{item}}</span>
</td>
<td>
<button @click="edit(index)" type="button" class="btn btn-primary" data-toggle="modal"
data-target="#modelId">编辑</button>
<!-- 模态框 -->
<!-- Button trigger modal -->
<!-- Modal -->
<div class="modal fade" id="modelId" tabindex="-1" role="dialog"
aria-labelledby="modelTitleId" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!-- 输入框 -->
<div class="form-group">
<label for="">姓名</label>
<!-- 绑定名字 -->
<input v-model="editItem.name" type="text" class="form-control"
name="" id="" aria-describedby="helpId" placeholder="员工姓名">
</div>
<!-- 下拉框 -->
<div class="form-group">
<label for="">位置</label>
<!-- 绑定位置 -->
<select v-model="editItem.job" class="custom-select" name="" id="">
<!-- 通过循环获得值 -->
<option v-for="(item, index) of jobList" :key="index">{{item}}
</option>
</select>
</div>
<!-- 单选按钮 -->
<div class="form-group">
<label for="">性别</label>
<div class="row ml-2">
<div class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="editItem.gender"
class="form-check-input" type="radio" value="男">
男
</label>
</div>
<div class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="editItem.gender"
class="form-check-input" type="radio"
value="女">
女
</label>
</div>
</div>
</div>
<!-- 多选按钮 -->
<div class="form-group">
<label for="">专业技能</label>
<div class="row">
<!-- v-bind:value="data" :value -->
<div v-for="item of skillList"
class="form-check form-check-inline col">
<label class="form-check-label">
<input v-model="editItem.skills"
class="form-check-input" type="checkbox"
:value="item">{{item}}
</label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">取消</button>
<button
@click="update()"
type="button" class="btn btn-primary" data-dismiss="modal">更新</button>
</div>
</div>
</div>
</div>
<button @click="del(index)" type="button" class="btn btn-primary">删除</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
Vue parts:
<!-- Vue -->
<script>
let vm = new Vue({
el: '#app',
data: {
isshow: false,
name: '',
gender: '',
job: '',
skills: [],
jobList: ['产品', '研发', '测试', '运营'],
skillList: ['HTML', 'CSS', 'JS', 'C', 'Rust'],
staffList: [
{
name: 'alice',
gender: '女',
job: '产品',
skills: ['HTML', 'JS'],
},
{
name: 'BOB',
gender: '男',
job: '运营',
skills: ['C', 'Rust'],
}
],
skillsColor: {
HTML: 'badge-primary',
CSS: 'badge-success',
JS: 'badge-dark',
C: 'badge-info',
Rust: 'badge-warning'
},
editIndex: 0,
editItem: {
}
},
methods: {
add: function () {
if (!this.name || !this.gender) {
this.isshow = true;
} else {
isshow = false;
this.staffList.push(
{
name: this.name,
gender: this.gender,
job: this.job,
skills: this.skills
}
);
}
this.clear();
},
clear: function () {
this.name = '',
this.gender = '',
this.job = this.jobList[1],
this.skills = []
},
del: function (index) {
this.staffList.splice(index, 1);
},
edit: function (i) {
// 获得编辑项的索引
this.editIndex = i;
this.editItem = {},
this.editItem.name = this.staffList[i].name;
this.editItem.job = this.staffList[i].job;
this.editItem.gender = this.staffList[i].gender;
this.editItem.skills = this.staffList[i].skills;
},
update:function(){
this.staffList.splice(this.editIndex,1,this.editItem);
}
},
mounted() {
this.job = this.jobList[1];
},
});
</script>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>