• Vue,品牌列表案例(仅添加,删除,搜索,全局过滤器,私有过滤器,日期填充,自定义按键修饰符)


    Vue,品牌列表案例(仅添加,删除,搜索,全局过滤器,私有过滤器,日期填充,自定义按键修饰符)

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="utf-8">
      5         <title></title>
      6         <script src="../js/vue.js"></script>
      7         <link rel="stylesheet" type="text/css" href="../css/bootstrap.css" />
      8     </head>
      9     <body>
     10         <div id="app">
     11             
     12             
     13             <div class="panel panel-primary">
     14                 <div class="panel-heading">
     15                     <h3 class="panel-title">添加品牌</h3>
     16                 </div>
     17                 <!-- form-inline 填在父元素里, 里面的子元素 占一行 -->
     18                 <div class="panel-body form-inline">
     19                     <label>
     20                         Id:
     21                         <input type="text" class="form-control" v-model="id">
     22                     </label>
     23                     
     24                     <label>
     25                         <!-- @keyup.enter 回车键抬起是触发add方法 keyup监听键盘抬起事件 .enter是确定了回车键而不是别的键 -->
     26                         Name:
     27                         <input type="text" class="form-control" v-model="name" @keyup.f2="add">
     28                     </label>
     29                 
     30                     <!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了
     31                       不加()也可以, 只不过不能传参-->
     32                     <input type="button" class="btn btn-primary" value="添加" @click="add()"/>
     33                     
     34                     
     35                     <label>
     36                         搜索名称关键字:
     37                         <input type="text" class="form-control" v-model="keywords" />
     38                     </label>
     39                 </div>
     40             </div>
     41             
     42             
     43             <table class="table table-bordered table-hover table-striped">
     44                 <thead>
     45                     <tr>
     46                         <th>Id</th>
     47                         <th>Name</th>
     48                         <th>Ctime</th>
     49                         <th>Operation</th>
     50                     </tr>
     51                 </thead>
     52                 <tbody>
     53                     <!-- 之前, v-for 中的数据, 都是直接从 data 上的list中直接渲染过来的 -->
     54                     <!-- 现在, 我们自定义了一个 search 方法,同时, 把 所有的关键字,通过传参的形式,传递给了
     55                      search 方法 -->
     56                     <!-- 在 search 方法内部,通过 执行 for 循环, 把所有符合 搜索关键字的数据,保存到 一个新数组
     57                      中, 返回-->
     58                     <tr v-for="item in search(keywords)" :key="item.id">
     59                         <td>{{ item.id }}</td>
     60                         <td>{{ item.name }}</td>
     61                         <td>{{ item.ctime | dateFormat() }}</td>
     62                         <td>
     63                             <!-- 使用 .prevent 阻止默认行为, 否则超链接跳转页面  -->
     64                             <a href="#" @click.prevent="del(item.id)">删除</a>
     65                         </td>
     66                     </tr>
     67                 </tbody>
     68             </table>
     69         </div>
     70     
     71         <div id="app1">
     72             <h3>{{ dt | dateFormat}} + 利用了全局过滤器</h3>
     73         </div>
     74             
     75         <div id="app2">
     76             <h3>{{ dt | dateFormat}} + 利用了私有过滤器</h3>
     77         </div>
     78     </body>
     79 </html>
     80 <script>
     81         // 全局的过滤器,进行时间的格式化
     82         // 所谓的全局过滤器, 就是所有的VM实例都共享的
     83         // 注意 pattern ="" 这块是传值的部分,如果后台传值 传的是 "yyyy-mm-ss"格式就会显示 "yyyy-mm-ss"格式, 如果是 "yyyy-mm-ss hh:mm:ss" 
     84         // 则会显示 "yyyy-mm-ss hh:mm:ss" 下面有 if 判断
     85         Vue.filter('dateFormat', function (dateStr, pattern =""){
     86             // 根据给定的时间字符串, 得到特定的时间
     87             var dt = new Date(dateStr)
     88             
     89             // 日期格式 yyyy-mm-dd
     90             //得到一个四位的年份
     91             var y = dt.getFullYear()
     92             
     93             //
     94             var m = dt.getMonth() + 1
     95             
     96             // getDate得到的是日期, getDay得到的是星期
     97             var d = dt.getDate()
     98             
     99             // return y + '-' + m + '-' + d
    100             
    101             // .toLowerCase 统一转成小写
    102             //判断在这里 依照格式判断
    103             if(pattern.toLowerCase() === 'yyyy-mm-dd'){
    104                 return `${y}-${m}-${d}`
    105             }else{
    106                 var hh = dt.getHours()
    107                 var mm = dt.getMinutes()
    108                 var ss = dt.getSeconds()
    109                 
    110                 return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    111             }
    112         })
    113         
    114     
    115         //自定义全局按键修饰符
    116         Vue.config.keyCodes.f2 = 113
    117         
    118         //创建 Vue 实例, 得到 ViewModel
    119         var vm = new Vue({
    120             el: '#app',
    121             data:{
    122                 id:'',
    123                 name:'',
    124                 keywords:'',
    125                 list:[
    126                     { id: 1, name: '奔驰', ctime: new Date() },
    127                     { id: 2, name: '宝马', ctime: new Date() },
    128                     { id: 3, name: '五菱宏光', ctime: new Date() }
    129                 ]
    130             },
    131             methods:{
    132                 add(){
    133                     // console.log("5555")
    134                     //分析:
    135                     //1. 获取到 id 和 name , 直接从data 上面获取
    136                     //2. 组织出一个对象
    137                     //3. 把这个对象, 调用 数组的 相关方法, 添加到data 的 list 中
    138                     //4. 注意: 在Vue中, 已经实现了数据的双向绑定, 每当我们修改了 data 中的数据, Vue
    139                     // 默认监听 数据的改动, 自动把最新的数据, 应用到页面上;
    140                     
    141                     // 5. 当我们意识到上面的第四步的时候,就证明大家已经入门Vue了, 我们更多的是在进行 VM中
    142                     // Model 数据的操作, 同时, 在操作 Model数据的时候, 指定的业务逻辑操作
    143                 
    144                     var car = { id: this.id, name: this.name, ctime: new Date() }
    145                     this.list.push(car)
    146                     
    147                     // 将输入框清空, 否则输入的内容还在
    148                     this.id = this.name = ''
    149                 },
    150                 del(id){
    151                     // 分析:
    152                     // 1. 如何根据Id, 找到要删除这一项的索引
    153                     // 2. 如果找到索引了, 直接调用 数组的 splice 方法
    154                     
    155                     // 方法一:
    156                     // some 根据指定的条件判断 (循环)
    157                     // this.list.some((item, i) => {
    158                     //     if(item.id == id) {
    159                     //         //从索引为 i的位置开始删, 删1个
    160                     //         this.list.splice(i, 1)
    161                     //         // 在 数组的 some 方法中,如果 return true,就会立即终止这个数组的后续循环
    162                     //         return  true;
    163                     //     }
    164                     // })
    165                     
    166                     // 方法二
    167                     //数组查找当前索引
    168                     var index = this.list.findIndex(item => {
    169                         if (item.id == id) {
    170                             return true;
    171                         }
    172                     })
    173                     console.log(index)
    174                     
    175                     this.list.splice(index, 1)
    176                 },
    177             search(keywords){  //搜索
    178                 
    179                 // 方法一
    180                 /* var newlist = []
    181                 this.list.forEach( item => {
    182                     if ( item.name.indexOf(keywords) != -1) {
    183                         newlist.push(item)
    184                     }
    185                 })
    186                 return newlist */
    187                 
    188                 //方法二
    189                 // 注意:  forEach   some   filter   findIndex   这些都属于数组的新方法
    190                 //  都会对数组中的每一项, 进行遍历, 执行相关操作 
    191                 
    192                 return this.list.filter( item => {
    193                 // var newlist = this.list.filter( item => {
    194                     // if(item.name.indexOf(keywords) != -1)
    195                     
    196                     // 注意 : ES6中, 为字符串提供了一个新方法, 叫做 String.prototype.includes('要包含的字符串')
    197                     //如果包含, 则返回 true , 否则返回 false
    198                     //jq 中有个类似的方法是 contain
    199                     if(item.name.includes(keywords)){
    200                         return item
    201                     }
    202                 })
    203                 
    204                 // return newlist
    205             },
    206         }
    207     });
    208 
    209         //利用了全局过滤器    
    210         var vm2 =new Vue({
    211             el: '#app1',
    212             data:{
    213                 dt: new Date()
    214             }
    215         })    
    216         
    217         //如何自定义一个私有的过滤器(局部)
    218         var vm3 = new Vue({
    219             el: '#app2',
    220             data:{
    221                 dt: new Date()
    222             },
    223             methods:{},
    224             filters:{
    225                    // 定义私有过滤器  过滤器有两个  条件   [过滤器名称 和 处理函数]
    226                 //过滤器调用的时候, 采用的是就近原则, 如果私有过滤器和全局过滤器名称一致了, 这时候 优先调用私有过滤器
    227                 dateFormat: function (dateStr, pattern = ''){
    228                     //根据给定的时间字符串,得到特定的时间
    229                     var dt = new Date(dateStr)
    230                     
    231                     //日期格式 yyyy-mm-dd
    232                     //得到一个四位的年份
    233                     var y = dt.getFullYear()
    234                     
    235                     //得到月份
    236                     // String.prototype.padStart(maxlength, fillString='')  填充字符串
    237                     //maxlength 是填充完总长度多少  fillString='' 表示用什么填充
    238                     var m = (dt.getMonth() + 1).toString().padStart(2, '0') 
    239                     
    240                     //getDate 得到的是日期 getDay得到的是星期
    241                     var d = dt.getDate().toString().padStart(2, '0') 
    242                     
    243                     // return y + '-' + m + '-' + d
    244                     
    245                     // .toLowerCase 统一转成小写
    246                     // 判断在这里 依照格式判断
    247                     if(pattern.toLowerCase() === 'yyyy-mm-dd'){
    248                         return `${y}-${m}-${d}`
    249                     }else{
    250                         var hh = dt.getHours().toString().padStart(2, '0') 
    251                         var mm = dt.getMinutes().toString().padStart(2, '0') 
    252                         var ss = dt.getSeconds().toString().padStart(2, '0') 
    253                         
    254                         return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    255                     }
    256                 }
    257             }
    258         })
    259 
    260             // 过滤器的定义语法
    261             // Vue.filter('过滤器的名称', function(){})
    262             
    263             // 过滤器中的 function ,第一个参数, 已经被规定死了, 永远都是 过滤器 管道符前面 传递过来的数据
    264             // Vue.filter('过滤器的名称', function(data) {
    265             //     return data + '123'
    266             // })
    267 </script>
    268 
    269 
    270 <!-- 过滤器调用的格式   {{ name | nameope}}   再调用name 之前先调用nameope 进行处理 -->  

      自定义全局按键修饰符

        Vue.config.keyCodes.  后加的是键盘上的键,  =后加的是键盘码

      113是f2的键盘码

      Vue.config.keyCodes.f2 = 113

      常见键盘码:https://www.cnblogs.com/wuhua1/p/6686237.html

    触发时正常 @触发

    1 <label>
    2                         <!-- @keyup.enter 回车键抬起是触发add方法 keyup监听键盘抬起事件 .enter是确定了回车键而不是别的键 -->
    3                         Name:
    4                         <input type="text" class="form-control" v-model="name" @keyup.f2="add">
    5                     </label>

     .enter 是回车键的触发方法

  • 相关阅读:
    4.异常捕获后再次抛出
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    JAVA层和JNI层实现Bitmap图镜像功能。
    关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
    镜象变换的源代码
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android获取项目下的一张图片的绝对路径问题以及解决方法
    fwrite用法
    关于毁灭地球
    memset,memcpy
  • 原文地址:https://www.cnblogs.com/wo1ow1ow1/p/11050620.html
Copyright © 2020-2023  润新知