HMVue2.5【filter过滤器】
1 过滤器的注意事项
2 过滤器的基本使用
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>Documenttitle>
head>
<body>
<div id="app">
<p>msg的值是:{{msg}}p>
<p>msg的值是:{{msg | capi}}p>
div>
<script src="./lib/vue-2.6.12.js">script>
<script>
// Vue.config.devtools = true; //安装了Vue-devtools插件但在浏览器控制台不显示的解决
const vm = new Vue({
el: '#app',
data: {
msg: 'hello vue'
},
//过滤器函数必须定义到filters节点内
filters: {
//注意:过滤器函数形参中的 val,永远都是“管道符|”前面的那个值
capi(val){
console.log(val)
//charAt获取字符串中指定索引位置的字符
console.log(val.charAt(0))
//首字母小写转为大写
const first = val.charAt(0).toUpperCase()
//从索引1位置开始截取字符串直至最后
const other = val.slice(1)
// 强调:过滤器中,一定要有一个返回值
return first+other
}
}
})
script>
body>
html>
3 私有过滤器和全局过滤器
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>Documenttitle>
head>
<body>
<div id="app">
<p>msg的值是:{{msg | capi}}p>
div>
<div id="app2">
<p>msg的值是:{{msg | capi}}p>
div>
<script src="./lib/vue-2.6.12.js">script>
<script>
// 使用 Vue.filter() 定义全局过滤器
Vue.filter('capi', function(str){
const first = str.charAt(0).toUpperCase()
const other = str.slice(1)
return first+other+'~~~'
});
//--------------------------------------------------------------
//一个vm只能控制一个大div
//此处,vm控制第一个div(id=app);第二个div(id=app2)不受影响
const vm = new Vue({
el: '#app',
data: {
msg: 'hello vue'
},
filters: {
capi(val){ //私有过滤器,只能在app中使用,app2中调用时会报错
const first = val.charAt(0).toUpperCase()
const other = val.slice(1)
return first+other
}
}
});
//--------------------------------------------------------------
const vm2 = new Vue({
el: '#app2',
data: {
msg: 'haifei'
},
});
script>
body>
html>
4 使用全局过滤器格式化时间(+HMVue2.4案例)
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>品牌列表案例title>
<link rel="stylesheet" href="./lib/bootstrap.css">
<link rel="stylesheet" href="./css/brandlist.css">
head>
<body>
<div id="app">
<div class="card">
<div class="card-header">添加品牌div>
<div class="card-body">
<form @submit.prevent="add">
<div class="form-row align-items-center">
<div class="col-auto">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">品牌名称div>
div>
<input type="text" class="form-control" placeholder="请输入品牌名称" v-model.trim="brand">
div>
div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">添加button>
div>
div>
form>
div>
div>
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th scope="col">#th>
<th scope="col">品牌名称th>
<th scope="col">状态th>
<th scope="col">创建时间th>
<th scope="col">操作th>
tr>
thead>
<tbody>
<tr v-for="item in list" :key="item.id">
<td>{{item.id}}td>
<td>{{item.name}}td>
<td>
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" :id="'cb' + item.id" v-model="item.status">
<label class="custom-control-label" :for="'cb' + item.id" v-if="item.status">已启用label>
<label class="custom-control-label" :for="'cb' + item.id" v-else>已禁用label>
div>
td>
<td>{{item.time | dateFormat}}td>
<td>
<a href="javascript:;" @click="remove(item.id)">删除a>
td>
tr>
tbody>
table>
div>
<script src="./lib/dayjs.min.js">script>
<script src="./lib/vue-2.6.12.js">script>
<script>
//声明格式化时间的全局过滤器
Vue.filter('dateFormat', function(time){
/*思路:
1. 对 time 进行格式化处理,得到 YYYY-MM-DD HH:mm:ss
2. 把 格式化的结果,return 出去
*/
//方法1:传统方法
/*
return time.getFullYear()+'-'+(time.getMonth()+1)+'-'+time.getDate()
+' '
+time.getHours()+':'+time.getMinutes()+':'+time.getSeconds()
*/
//方法2:利用dayjs库:直接调用dayjs()得到的是当前时间,调用dayjs(给定的日期时间)得到指定的日期
const dtStr = dayjs(time).format('YYYY-MM-DD HH:mm:ss')
return dtStr
});
//-------------------------------------------------
const vm = new Vue({
el: '#app',
data: {
// 品牌的列表数据
list: [
{id:1, name:'宝马', status:true, time:new Date()},
{id:2, name:'奔驰', status:false, time:new Date()},
{id:3, name:'奥迪', status:true, time:new Date()},
],
// 用户输入的品牌名称
brand: '',
//下一个可用的id
nextId: 4,
},
methods: {
// 点击链接,删除对应的品牌信息
remove(id){
console.log(id)
this.list = this.list.filter(item => item.id!==id)
},
// 阻止表单的默认提交行为之后,触发 add 方法
add(){
console.log(this.brand)
if(this.brand === ""){
alert('必须填写品牌名称')
return
}else{
//1. 先把要添加的品牌对象,整理出来
const obj = {
id: this.nextId,
name: this.brand,
status: true,
time: new Date()
}
//2. 往 this.list 数组中 push 步骤 1 中得到的对象
this.list.push(obj)
//3. 清空 this.brand
this.brand = ''
//4. 让 this.nextId 自增 +1
this.nextId++
}
}
},
})
script>
body>
html>
https://dayjs.fenxianglu.cn/category/parse.html