Vue小案例 之 商品管理------学习过滤器 使用过滤器处理日期的格式

时间:2022-02-04 05:34:40

代码学习过滤器

过滤器介绍:过滤模型数据,在数据显示前做预处理操作;

内置过滤器:在1.x中,Vue提供了内置过滤器,但是在2.x中已经完全废除;

解决办法:

(1)使用第三方库来替代1.x中的内置过滤器;

(2)使用自定义过滤器;

自定义过滤器:

a.全局配置:Vue.filter( id, [definition] )

b. 局部配置:在Vue实例中配置filters

详细介绍网址:https://cn.vuejs.org/v2/api/#Vue-filter

过滤器语法:

  1. 无参:{{msg | filter}}

示例:

Vue小案例 之 商品管理------学习过滤器  使用过滤器处理日期的格式

vue代码:

<script>

            window .onload= () =>{
new Vue({
el:"#one",
data:{
msg:'' },
methods:{ },
filters:{
UpperCase(value){
if(!value){
return '';
}
return value.toString().toUpperCase();
}
}
});
}
</script>

过滤器默认参数:会将msg中的属性传入

html:

<div id="one">
<input type="text" v-model="msg" /><br />
小写转大写:{{msg|UpperCase}} </div>

2、 带参:{{msg | filter(param)}}

示例:

Vue小案例 之 商品管理------学习过滤器  使用过滤器处理日期的格式

使用了全局的配置过滤器:

Vue.filter('strSplit',function(value,start,end){
if(!value){
return '';
}
console.log(value.toString().slice(start,end));
return value.toString().slice(start,end); });

在data中定义变量msg1=‘ ’

HTML:

<input type="text"  v-model="msg1" /><br />
截取字符:{{msg1|strSplit(,)}}

带了两个参数

使用过滤器处理商品管理中日期的格式

定义了一个全局的过滤器之后得到效果:Vue小案例 之 商品管理------学习过滤器  使用过滤器处理日期的格式

定义的全局过滤器:

Vue.filter('formatDate',function(value){

                if(!value)
return ''; if(value instanceof Date){
var d = value;
var y = d.getFullYear();
var m = d.getMonth()+;
var day =d.getDate()<?''+d.getDate() : d.getDate();
var myDate = y+ '-' + m +'-'+day;
return myDate; }
else {
return value; } });

addGoods()方法也需要做出相应的改变:

addGoods(){

                            this.goods.addDate = new Date ;

                        this.goodsArry.push(this.goods);
this.goods={};
},

HTML:

<td>{{item.addDate|formatDate}}</td>

当没有使用过滤器时的效果,其效果就没有日期格式的优化了,如图所示:

Vue小案例 之 商品管理------学习过滤器  使用过滤器处理日期的格式

没有使用过滤器的HTML代码:

<td>{{item.addDate}}</td>

整个商品管理案例总的demo:

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商品管理------创建页面与部分数据</title>
<script src="../js/vue.js"></script> <script>
Vue.filter('formatDate',function(value){ if(!value)
return ''; if(value instanceof Date){
var d = value;
var y = d.getFullYear();
var m = d.getMonth()+;
var day =d.getDate()<?''+d.getDate() : d.getDate();
var myDate = y+ '-' + m +'-'+day;
return myDate; }
else {
return value; } }); window .onload= () =>{
new Vue({
el:"#container",
data:{
imgUrl:'../res/images/',
imgName:'lovely.ico',
goods:{
id:'',
name:'',
price:'',
num:'',
type:''
},
goodsType:['零食','电子产品','生活用品'],
goodsArry:[
{id:'',name:'可乐',price:3.5,num:,type:'零食',addDate:'2019-3-13'},
{id:'',name:'GTX2080',price:,num:,type:'电子产品',addDate:'2019-3-14'},
{id:'',name:'牙刷',price:,num:,type:'生活用品',addDate:'2019-3-20'} ],
colNum:,
delArray:[]//删除选中的索引 },
methods:{
addGoods(){ this.goods.addDate = new Date ; this.goodsArry.push(this.goods);
this.goods={};
},
delGoods(index){ this.goodsArry.splice(index,);
},
clearGoodsArry(){ this.goodsArry=[];
},
delSelected(){ this.delArray.sort((a,b)=>{
return a-b;
}); console.log(this.delArray); for(var i=;i<this.delArray.length;i++)
{
this.goodsArry.splice(this.delArray[i]-i,);
}
this.delArray=[];
} }
});
}
</script>
<style>
#container{
margin: auto;
text-align: center;
width: 1000px;
border:2px solid gray;
} .header{ margin: 10px;
border: 1px solid gray;
} .header .title{ color: rgb(,,);
background: rgb(,,);
}
.sub_title{
background:rgb(,,);
color: rgb(,,);
font-size: 30px;
}
.form-warp{
margin: 10px;
padding-bottom: 10px;
border: 1px solid gray; }
.form-warp .content{ line-height: 35px;
} .form-warp input{
width: 150px;
height: 18px; } .form-warp select{
width: 154px;
height: 24px;
} .table-warp{
padding-bottom: 10px;
margin: 10px;
border: 1px solid gray;
}
.table-warp a{
text-decoration: none;
}
.table-warp th{
width: 80px;
color: #ffff;
background: rgb(,,);
} .logo
{
position: relative;
top: 12px;
}
.fontColor{ color: gray;
text-align: center;
} .clear-btn{
text-align: right;
padding-right: 10px;
} </style>
</head>
<body>
<div id="container"> <!--logo title-->
<div class="header">
<img :src="imgUrl+imgName" class="logo" height="80px" width="100px" />
<h1 class="title">商品管理</h1> </div> <!--输入部分input-->
<div class="form-warp">
<div class="sub_title">添加商品</div>
<div class="content"> 商品编号:<input type="text" placeholder="请输入商品编号" v-model="goods.id"/><br />
商品名称:<input type="text" placeholder="请输入商品名称" v-model="goods.name"/><br />
商品价格:<input type="text" placeholder="请输入商品价格" v-model="goods.price"/><br />
商品数量:<input type="text" placeholder="请输入商品数量" v-model="goods.num"/><br />
商品类型:<select v-model="goods.type"> <option value="" disabled="disabled">--请选择--</option>
<option v-for="type in goodsType">{{type}}</option> </select> </div>
<div class="form-btn">
<button @click="addGoods">确认添加</button>
<button @click="goods= { } ">重置信息</button> </div> </div>
<!--显示表格-->
<div class="table-warp">
<div :class="{fontColor:goodsArry.length<=0}" class="sub_title">商品列表</div>
<table border="" align="center"> <tr>
<th>序号</th>
<th>编号</th>
<th>名称</th>
<th>价格</th>
<th>数量</th>
<th>类型</th>
<th width="100px">入库日期</th> <th>删除</th>
<th>选择</th>
</tr>
<td :colspan="colNum" height="150px" v-show="goodsArry.length<=0">
暂无商品
</td> <tr v-for="(item,index) in goodsArry" :key="item.id">
<td>{{index}}</td>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.price}}</td>
<td style="display: flex;">
<a style="flex: 0.5;" href="#" @click.prevent="item.num=item.num--<=0?0:item.num--">-</a><!--style中的flex为了使其点击的范围扩大--> {{item.num}}
<a style="flex: 0.5;" href="#" @click.prevent="item.num++">+</a>
</td>
<td>{{item.type}}</td>
<td>{{item.addDate|formatDate}}</td>
<td>
<button @click="delGoods(index)">删除</button>
</td> <td>
<input type="checkbox" :value="index" v-model="delArray"/> </td>
</tr>
<!-- {{delArray}}-->
</table> <div class="clear-btn">
<a href="#" @click="delSelected" v-show="delArray.length>0" >删除选中</a>
<a href="#" @click="clearGoodsArry" v-show="goodsArry.length>0" >清空全部</a>
</div> </div> </div>
</body>
</html>

商品管理小案例