1. 程式人生 > >Vue小案例 之 商品管理------學習過濾器 使用過濾器處理日期的格式

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

microsoft borde btn 語法 添加 var clear ejs format

代碼學習過濾器

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

內置過濾器:在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代碼:

<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.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>
商品管理小案例



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