码迷,mamicode.com
首页 > Web开发 > 详细

指令综合运用-品牌案例.html

时间:2020-03-25 21:05:37      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:ros   pat   get   contain   indexof   include   括号   ase   methods   

案列:使用vue实现品牌的增加,删除和关键字搜索以及时间的处理

分析:手动实现筛选的方式:

  • 筛选框绑定到vm实列中的searchName属性中:
  • <hr> 输入筛选名称:
    
    <input type="text" v-model="searchName">

     

  • 使用v-for指令循环每一行的数据的时候,我们不再直接item in list ,而是“ in ”一个过滤的methods方法,同时把过滤条件searchName 传递进去:
  • <tbody>
    
          <tr v-for="item in search(searchName)">
    
            <td>{{item.id}}</td>
    
            <td>{{item.name}}</td>
    
            <td>{{item.ctime}}</td>
    
            <td>
    
              <a href="#" @click.prevent="del(item.id)">删除</a>
    
            </td>
    
          </tr>
    
        </tbody>

     

  • search过滤方法中,使用数组filter方法进行过滤,实现关键字搜索:
  • search(){
        return this.list.filter(x=>{
             return x.name.indexof(name)!=-1;
    
       });  
    }

     

 重头大戏开场

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6     <title>vue实列</title>
  7     <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
  8     <!-- 引用css库 -->
  9     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
 10 </head>
 11 <body>
 12     <div id="app">
 13 
 14         <div class="panel panel-preimary">
 15             <div class="panel-heading">
 16                 <h3 class="panel-title">添加产品</h3>
 17             </div>
 18             <div class="panel-body form-inline">
 19                 <label>
 20                     ID:
 21                     <input type="text" class="form-control" v-model="id">
 22                 </label>
 23                 <label>
 24                     Name:
 25                     <input type="text" class="form-control" v-model="name">
 26                 </label>
 27                     <!-- 在vue中使用时间绑定机制,为元素指定处理函数时候,如果我们加了小括号,就可以给函数传参 -->
 28                     <input type="button" value="添加" class="btn btn-primary" @click="add">
 29                     <label>
 30                         搜索关键字:
 31                         <input type="text" class="from-control" v-model="keywords">
 32                     </label>
 33             </div>
 34         </div>
 35         <table class="table table-bordered table-hover table-striped">
 36             <thead>
 37                 <tr>
 38                     <th>Id</th>
 39                     <th>Name</th>
 40                     <th>CTIME</th>
 41                     <th>OPERATION</th>
 42                 </tr>
 43             </thead>
 44             <tbody>
 45             
 46                 <!-- 之前的-for 中的数据都是从data当中直接渲染过去的 -->
 47                 <!-- 现在我们,自定义一个search方法,同时我们把所有的关键字,通过传参的形式传递给search -->
 48                 <!-- 在search中我们通过执行for循环把所有符合的关键字保存在一个新的数组中 -->
 49 
 50                 <tr v-for="item in search(keywords)" :key="item.id">
 51                     <td>{{ item.id }}</td>
 52                     <td v-text="item.name"></td>
 53                     <td>{{ item.ctime | dateFormat(‘yyyy-MM-dd‘)}}</td>
 54                     <td>
 55                       <a href="" @click.prevent="del(item.id)">删除</a>
 56                     </td>
 57                   </tr>
 58             </tbody>
 59         </table>
 60     </div>
 61 
 62 
 63     <script>
 64         
 65         Vue.filter(dateFormat,function (dateStr,pattern=‘‘) {
 66             //根据字符串获取特定时间
 67             var dt = new Date(dateStr)
 68             //yyy-mm-dd
 69             var y = dt.getFullYear()
 70 
 71             var m = dt.getMonth()+1
 72 
 73             var d = dt.getDate()
 74             if(pattern && pattern.toLowerCase() == yyy-mm-dd){
 75                 return ${y}-${m}-${d}
 76             }else{
 77                 var hh = dt.getHours()
 78                 //padStart:开始填充;padEnd():末尾填充(如两位填充数字1:01和10)
 79                 var mm = (dt.getMinutes()).toString().padStart(2,0)
 80                 var ss = (dt.getSeconds()).toString().padStart(2,0)
 81                 return ${y}-${m}-${d} ${hh}:${mm}:${ss}
 82             }
 83         })
 84 
 85         var vm = new Vue({
 86             el:"#app",
 87             data :{
 88                 dt:new Date(),
 89                 id:null,
 90                 name:null,
 91                 keywords:‘‘,
 92                 list:[
 93                     { id: 1, name: 蛋挞, ctime: new Date() },
 94                     { id: 2, name: 奶茶, ctime: new Date() }
 95 
 96                 ]
 97 
 98             },
 99             methods:{
100        
101 
102 
103                 add(){
104                     //console.log(‘ok‘)
105                     //分析
106                     //1.获取到id与name直接从data中获取
107                     //2.组织出一个对象
108                     //3.把这个对象,调用数组的方法, 添加到当前list中
109                     //4.在vue中我们已经实现了数据的双向绑定通过v-model每当我们修改data中的数据的时候我们vue会默认监听会默认监听到数据的改动,自动把最新的数据,应用到页面上
110                     //5.在vue中我们更多的是在进行 VM中 Model 数据的操作,同时,在操作Model数据的时候,指定的业务逻辑操作;
111 
112 
113                     var food = { id: this.id, name: this.name, ctime: new Date()}
114 
115                     this.list.push(food);
116                     this.id = this.name =‘‘;
117                 },
118                 del(id){
119                     //我们根据ID进行数据的删除
120                     //1.我们根据Id找到我们要删除项的索引
121                     //2.如果我们找到了索引就开始调用数组的splice的方法
122 
123                  /*   this.list.some((item,i) => {
124                         if(item.id == id){
125                             this.list.splice(i,1)
126                             //在数组some方法中如果reyurn true,就会立即终止这个数组的后续循环
127                             return true;
128                         }
129 
130                     }) */
131 
132 
133                     var index = this.list.findIndex(item=>{
134                         if(item.id == id){
135                             return true;
136                         }
137                     })
138                     //console.log(index)
139                     this.list.splice(index,1)
140                 },
141                 search(keywords){
142 
143                     /* var newlist = []
144                     this.list.forEach(item=>{
145                         if(item.name.indexof(keywords)!=-1){
146                             newList.push(item)
147                         }
148                     })
149                     return newList(item)*/
150 
151                     //注意:  forEach   some   filter   findIndex   这些都属于数组的新方法,
152                     //都会对数组每一项进行遍历执行相关操作
153                     return this.list.filter(item =>{
154                                     // if(item.name.indexOf(keywords) != -1)
155 
156                                     // 注意 : ES6中,为字符串提供了一个新方法,叫做  String.prototype.includes(‘要包含的字符串‘)
157                                     //  如果包含,则返回 true ,否则返回 false
158                                     //  contain
159                                     if (item.name.includes(keywords)) {
160                                     return item
161                                     }
162                     })
163                     //return newList
164                                  
165                 }
166             },
167             filters: { // 定义私有过滤器    过滤器有两个 条件  【过滤器名称 和 处理函数】
168         // 过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候 优先调用私有过滤器
169         dateFormat: function (dateStr, pattern = ‘‘) {
170           // 根据给定的时间字符串,得到特定的时间
171           var dt = new Date(dateStr)
172           return dateStr
173         },
174 
175             }
176         })
177     </script>
178 </body>
179 </html>

 

指令综合运用-品牌案例.html

标签:ros   pat   get   contain   indexof   include   括号   ase   methods   

原文地址:https://www.cnblogs.com/yangyunhao/p/12562444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!