学习目标:
- 学习品牌管理的案例
- vue的过滤器
学习内容:品牌管理案例
实现功能
- 添加,删除,修改,查找
1、搭建基本界面结构
- 引入bootstrap
- 引入Vue
- 使用v-for进行渲染
2、实现添加功能
- 拿到输入的数据
- 用这个数据构造一个对象
- 可以调用数组的方法把这个对象,插入到数组里
- 因为vue已经帮我们实现了双向绑定。Vue会监听数据的改变,数据改变之后,vue会帮我们渲染到指定地方。
3、实现删除功能:使用foreach遍历
- 使用foreach遍历
- 使用数组的splice方法
4、实现查找功能
-
ES6里的filter方法:ilter方法直接会返回一个新的数组
-
filter的回调方法中返回的是bool值,如果这个bool值是true的话就会被加入到新的数组中
-
` let newList = this.list.filter(item => {
if (item.name.includes(this.keyword)) { return true; } }`
5、实现修改功能
- 需要设置一个中转函数来存放原item的值
- 把新获取到的值赋给中转函数中的值即可
6、过滤器
- 过滤器可以用在两个地方:mustache插值和v-bind表达式。过滤器应该被添加在JavaScript表达式的尾部,由“管道”符指示。
- 使用方法:
{{变量 | 过滤器名}}
{{变量 | 过滤器 | 另一个过滤器}} 可以同时使用多个过滤器,后面过滤器的data就是前面表达式传过来的值 - 全局和局部(私有)定义
全局
通过Vue提供的filter方法定义:Vue.filter()
参数:过滤器的名字或过滤器执行函数
局部(私有)
filters这个是实例化Vue的一个参数,和data,methods平 级的,里面放的就是我们这个实例的私有过滤器
品牌管理代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu"
crossorigin="anonymous"
/>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
crossorigin="anonymous"
></script>
</head>
<body>
<div id="app">
<div class="container">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">添加品牌</h3>
</div>
<div class="panel-body">
<form action="" method="POST" class="form-inline" role="form">
<div class="form-group">
<label class="" for="">Id:</label>
<input
type="text"
class="form-control"
id=""
placeholder="Input field"
v-model="carId"
/>
</div>
<div class="form-group">
<label class="" for="">Name:</label>
<input
type="text"
class="form-control"
id=""
placeholder="Input field"
v-model:value="carName"
/>
</div>
<button type="button" class="btn btn-primary" @click="addCar">
添加
</button>
<div class="form-group">
<label class="" for="">搜索名称关键字:</label>
<input
type="text"
class="form-control"
id=""
placeholder="Input field"
v-model="searchKey"
/>
</div>
</form>
</div>
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Ctime</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in getCarList()" :key="item.id">
<td>{{item.id}}</td>
<td>{{item.carName}}</td>
<td>{{item.cTime | setTime('YYYY/MM/DD-ho:mi:se')}}</td>
<td>
<button
type="button"
class="btn btn-danger"
data-toggle="modal"
data-target="#myModal"
@click="trans(item)"
>
删除
</button>
<button
type="button"
class="btn btn-danger"
data-toggle="modal"
data-target="#myModal2"
@click="trans(item)"
>
修改
</button>
<!-- 模态框(Modal) -->
<div
class="modal fade"
id="myModal"
tabindex="-1"
role="dialog"
aria-labelledby="myModalLabel"
aria-hidden="true"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button
type="button"
class="close"
data-dismiss="modal"
aria-hidden="true"
>
×
</button>
<h4 class="modal-title" id="myModalLabel">
提示提示提示提示提示
</h4>
</div>
<div class="modal-body">真的要删除吗</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-default"
data-dismiss="modal"
>
算啦
</button>
<button
type="button"
class="btn btn-primary"
data-dismiss="modal"
@click="deleteCar()"
>
我真的要删它
</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal -->
</div>
<!-- 模态框(Modal) -->
<div
class="modal fade"
id="myModal2"
tabindex="-1"
role="dialog"
aria-labelledby="myModalLabel"
aria-hidden="true"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button
type="button"
class="close"
data-dismiss="modal"
aria-hidden="true"
>
×
</button>
<h4 class="modal-title" id="myModalLabel">
提示!!!!!!!!!
</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" role="form">
<!-- <div class="form-group">
<label
for="firstname"
class="col-sm-2 control-label"
>ID</label
>
<div class="col-sm-10">
<input
type="text"
class="form-control"
id="firstname"
placeholder="请输入修改后的ID"
v-model="newid"
/>
</div>
</div> -->
<div class="form-group">
<label
for="lastname"
class="col-sm-2 control-label"
>Name</label
>
<div class="col-sm-10">
<input
type="text"
class="form-control"
id="lastname"
v-model="newCarName"
placeholder="请输入修改后的Name"
/>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-default"
data-dismiss="modal"
>
算啦不改了
</button>
<button
type="button"
class="btn btn-primary"
data-dismiss="modal"
@click="change()"
>
我真的要改了它
</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal -->
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
<script>
Vue.filter("setTime", function (data, format) {
let y = data.getFullYear();
let m = (data.getMonth() + 1).toString().padStart(2, 0);
let d = data.getDate().toString().padStart(2, 0);
let hours = data.getHours().toString().padStart(2, 0);
let minutes = data.getMinutes().toString().padStart(2, 0);
let seconds = data.getSeconds().toString().padStart(2, 0);
return format
.replace("YYYY", y)
.replace("MM", m)
.replace("DD", d)
.replace("ho", hours)
.replace("mi", minutes)
.replace("se", seconds);
});
const vm = new Vue({
el: "#app",
data: {
carId: "",
carName: "",
searchKey: "",
carList: [
{
id: 1,
carName: "奔驰g500",
cTime: new Date(),
},
{
id: 2,
carName: "奥迪R8",
cTime: new Date(),
},
],
// newid: "",
newCarName: "",
transf: "",
},
methods: {
// 添加
addCar() {
let obj = {
id: this.carId,
carName: this.carName,
cTime: new Date(),
};
if (this.carList.find((item) => item.id == this.carId)) {
alert("Id重复");
} else {
this.carList.push(obj);
}
this.carId = "";
this.carName = "";
//
},
// 删除
deleteCar() {
this.carList.splice(this.carList.indexOf(this.transf), 1);
},
getCarList() {
return this.carList.filter((item) => {
return item.carName.includes(this.searchKey);
});
},
change(item) {
// this.transf.carId = this.newid;
this.transf.carName = this.newCarName;
},
trans(item) {
this.transf = item;
},
},
});
</script>
</html>
学习时间:2022.12.27
扩充:
- padStart()
这个是字符串提供的方法,所以我们先要保证调用的地方是个字符串
这个方法里两个参数 -
显示的位数
位数不足时在前面补充的内容
let d = data.getDate().toString().padStart(2, 0);
举例为获取时间的时候不足两位的时候补零
2. padEnd()
和上面用法一样,这个是在后面补一个值
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个