Vue小案例 之 商品管理------學習過濾器 使用過濾器處理日期的格式

代碼學習過濾器

過濾器介紹:過濾模型數據,在數據顯示前作預處理操做;

內置過濾器:在1.x中,Vue提供了內置過濾器,可是在2.x中已經徹底廢除;html

解決辦法:  vue

        (1)使用第三方庫來替代1.x中的內置過濾器;         api

        (2)使用自定義過濾器;ide

自定義過濾器:學習

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

          b. 局部配置:在Vue實例中配置filters優化

詳細介紹網址:https://cn.vuejs.org/v2/api/#Vue-filter

過濾器語法:

  1.            無參:{{msg | filter}}

示例:this

 

vue代碼:url

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

過濾器默認參數:會將msg中的屬性傳入spa

html:

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

 

二、 帶參:{{msg | filter(param)}}

示例:

 

 

 使用了全局的配置過濾器:

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(1,3)}} 

帶了兩個參數

 

 

 

使用過濾器處理商品管理中日期的格式

定義了一個全局的過濾器以後獲得效果:

 

 定義的全局過濾器:

Vue.filter('formatDate',function(value){ if(!value) return ''; if(value instanceof Date){ var d = value; var y = d.getFullYear(); var m = d.getMonth()+1; var day =d.getDate()<10?'0'+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>

 

當沒有使用過濾器時的效果,其效果就沒有日期格式的優化了,如圖所示:

沒有使用過濾器的HTML代碼:

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

 

整個商品管理案例總的demo:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>商品管理------建立頁面與部分數據</title>
 6         <script src="../js/vue.js"></script>
 7         
 8         <script>
 9             Vue.filter('formatDate',function(value){  10                 
 11                 if(!value)  12                     return '';  13                 
 14                 if(value instanceof Date){  15                             var d = value;  16                             var y = d.getFullYear();  17                             var m = d.getMonth()+1;  18                             var day =d.getDate()<10?'0'+d.getDate() : d.getDate();  19                             var myDate = y+ '-' + m +'-'+day;  20                             return myDate;  21                     
 22  }  23                 else {  24                     return value;  25                     
 26  }  27                 
 28                 
 29                          
 30  });  31             
 32             
 33             window .onload= () =>{  34                 new Vue({  35                 el:"#container",  36  data:{  37                     imgUrl:'../res/images/',  38                     imgName:'lovely.ico',  39  goods:{  40                         id:'',  41                         name:'',  42                         price:'',  43                         num:'',  44                         type:''
 45  },  46                     goodsType:['零食','電子產品','生活用品'],  47  goodsArry:[  48                     {id:'001',name:'可樂',price:3.5,num:10,type:'零食',addDate:'2019-3-13'},  49                     {id:'002',name:'GTX2080',price:9999,num:20,type:'電子產品',addDate:'2019-3-14'},  50                     {id:'003',name:'牙刷',price:5,num:30,type:'生活用品',addDate:'2019-3-20'}  51                     
 52  ],  53                     colNum:8,  54                     delArray:[]//刪除選中的索引
 55                     
 56                     
 57                 
 58  },  59  methods:{  60  addGoods(){  61                              
 62                             
 63                             this.goods.addDate = new Date ;  64                         
 65                         this.goodsArry.push(this.goods);  66                         this.goods={};  67  },  68  delGoods(index){  69                         
 70                         this.goodsArry.splice(index,1);  71  },  72  clearGoodsArry(){  73 
 74 
 75                      this.goodsArry=[];  76  },  77  delSelected(){  78                          
 79                          this.delArray.sort((a,b)=>{  80                              return a-b;  81  });  82                          
 83                          console.log(this.delArray);  84                          
 85                          for(var i=0;i<this.delArray.length;i++)  86  {  87                              this.goodsArry.splice(this.delArray[i]-i,1);  88  }  89                          this.delArray=[];  90  }  91                         
 92                     
 93  }  94  });  95  }  96         </script>
 97         <style>
 98  #container{  99                 margin: 0 auto; 100                 text-align: center; 101  width: 1000px; 102  border:2px solid gray; 103  } 104         
105  .header{ 106 
107  margin: 10px; 108  border: 1px solid gray; 109  } 110 
111 
112  .header .title{ 113 
114       color: rgb(53,73,93); 115     background: rgb(65,184,131); 116  } 117  .sub_title{ 118       background:rgb(53,73,93); 119      color: rgb(65,184,131); 120      font-size: 30px; 121  } 122 .form-warp{ 123  margin: 10px; 124    padding-bottom: 10px; 125  border: 1px solid gray; 126 
127 } 128 .form-warp .content{ 129 
130 
131   line-height: 35px; 132 } 133 
134 .form-warp input{ 135  width: 150px; 136  height: 18px; 137 
138 } 139 
140         .form-warp select{ 141  width: 154px; 142  height: 24px; 143 } 144 
145    .table-warp{ 146     padding-bottom: 10px; 147  margin: 10px; 148  border: 1px solid gray; 149 } 150  .table-warp a{ 151  text-decoration: none; 152 } 153 .table-warp th{ 154  width: 80px; 155  color: #ffff; 156   background: rgb(53,73,93); 157 } 158 
159 .logo 160 { 161  position: relative; 162  top: 12px; 163 } 164 .fontColor{ 165     
166  color: gray; 167     text-align: center; 168 } 169 
170 .clear-btn{ 171   text-align: right; 172   padding-right: 10px; 173 } 174         
175         
176         </style>
177     </head>
178     <body>
179         <div id="container">
180             
181             <!--logo title-->
182             <div class="header">
183                 <img :src="imgUrl+imgName" class="logo"  height="80px"  width="100px"   />
184                 <h1 class="title">商品管理</h1>
185                 
186             </div>
187             
188             <!--輸入部分input-->
189             <div  class="form-warp">
190                 <div class="sub_title">添加商品</div>
191                 <div class="content">
192                     
193                     商品編號:<input type="text" placeholder="請輸入商品編號"  v-model="goods.id"/><br />
194                     商品名稱:<input type="text" placeholder="請輸入商品名稱"  v-model="goods.name"/><br />
195                     商品價格:<input type="text" placeholder="請輸入商品價格"  v-model="goods.price"/><br />
196                     商品數量:<input type="text" placeholder="請輸入商品數量" v-model="goods.num"/><br />
197                     商品類型:<select v-model="goods.type">
198                         
199                         <option value="" disabled="disabled">--請選擇--</option>
200                         <option v-for="type in goodsType">{{type}}</option>
201                         
202                     </select>
203                     
204             </div>
205             <div class="form-btn">
206                 <button @click="addGoods">確認添加</button>
207                 <button @click="goods= { } ">重置信息</button>
208                 
209                 
210                 
211             </div>
212                 
213     </div>
214     <!--顯示錶格-->
215     <div class="table-warp">
216         <div :class="{fontColor:goodsArry.length<=0}"   class="sub_title">商品列表</div>
217         <table border="1" align="center">
218             
219             <tr>
220                 <th>序號</th>
221                 <th>編號</th>
222                 <th>名稱</th>
223                 <th>價格</th>
224                 <th>數量</th>
225                 <th>類型</th>
226                 <th width="100px">入庫日期</th>
227                 
228                 <th>刪除</th>
229                 <th>選擇</th>
230             </tr>
231             <td :colspan="colNum" height="150px" v-show="goodsArry.length<=0">
232  暫無商品 233             </td>
234             
235             <tr v-for="(item,index) in goodsArry" :key="item.id">
236                 <td>{{index}}</td>
237                 <td>{{item.id}}</td>
238                 <td>{{item.name}}</td>
239                 <td>{{item.price}}</td>
240                 <td style="display: flex;">
241                     <a style="flex: 0.5;"  href="#" @click.prevent="item.num=item.num--<=0?0:item.num--">-</a><!--style中的flex爲了使其點擊的範圍擴大-->
242                     
243  {{item.num}} 244                     <a style="flex: 0.5;"  href="#" @click.prevent="item.num++">+</a>
245                 </td>
246                 <td>{{item.type}}</td>
247                 <td>{{item.addDate|formatDate}}</td>
248                 <td>
249                     <button  @click="delGoods(index)">刪除</button>
250                 </td>
251                 
252                 <td>
253                     <input type="checkbox" :value="index" v-model="delArray"/>
254                     
255                     
256                     
257                 </td>
258             </tr>
259     <!--    {{delArray}}-->
260         </table>
261         
262         
263         
264         
265         <div class="clear-btn">
266           <a href="#" @click="delSelected" v-show="delArray.length>0" >刪除選中</a>
267           <a href="#" @click="clearGoodsArry" v-show="goodsArry.length>0" >清空所有</a>
268       </div>
269         
270       </div>
271       
272          
273             
274             
275             
276             </div>
277     </body>
278 </html>
商品管理小案例
相關文章
相關標籤/搜索