5vue自定义全局按键修饰符

241 阅读2分钟

按键修饰符

  • .enter
  • .tab
  • .delete(捕获删除或者异常)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

通过全局Vue.config.keyCodes.f2=113 ---->查询按键编码

调用@keyup.f2="add"

        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>时间过滤器</title>
            <link rel="stylesheet" href="./css/bootstrap.min.css">
            <script src="./lib/vue.js"></script>
        </head>
        
        <body>
            <div id="app">
                <div class="panel panel-primary">
                    <div class="panel-heading">
                        <h3 class="panel-title">添加品牌</h3>
                    </div>
                    <div class="panel-body form-inline">
                        <label for="">Id
                            <input type="text" name="" id="" v-model="id" class="form-control">
                        </label>
                        <label for="">Name
                            <input type="text" name="" id="" v-model="name" class="form-control" @keyup.f2='add'>
                        </label>
                        <label for="">
                            <input type="button" value="添加" name="" id="" class="btn btn-primary" @click="add">
                        </label>
                        <label for="">搜索名称关键字
                            <input type="text" name="" id="" v-model="keywords" class="form-control">
                        </label>
                    </div>
                </div>
        
                <table class="table table-bordered table-hover table-striped">
                    <thead>
                        <th>ID</th>
                        <th>Name</th>
                        <th>Ctime</th>
                        <th>Operation</th>
                    </thead>
                    <tbody>
                        <tr v-for="item in search(keywords)" :key="item.id">
                            <td>{{item.id}}</td>
                            <td v-text="item.name"></td>
                            <td>{{item.ctime|dateFormat()}}</td>
                            <td><a href="" @click.prevent='dele(item.id)'>删除</a></td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div id="app2">
                <h2>{{1+2}}</h2>
                <p>{{dt|dateFormat}}</p>
            </div>
            <script>
                // 过滤器 start
                //时间过滤器,全局,时间事件格式化
                Vue.filter('dateFormat', function (dataStr, pattern = '') {
                    // 根据给定的字符串dataStr,得到特定的时间
                    // yyyy-mm-dd   拼接
                    var dt = new Date(dataStr)
                    var y = dt.getFullYear()
                    var m = dt.getMonth() + 1
                    var d = dt.getDate()
                    //连接
                    // return y+'-'+m+'-'+d
                    //模板字符串
                    // return `yyyy-mm-dd`
        
                    // 先变小写
                    if (pattern.toLowerCase() == 'yyyy-mmm-dd') {
                        return `${y}-${m}-${d}`
                    } else {
                        var hh = dt.getHours()
                        var mm = dt.getMinutes()
                        var ss = dt.getSeconds()
                        return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
                    }
                })
                //自定义全局按键修饰符
                Vue.config.keyCodes.f2 = 113
                // 过滤器 end
                var vm = new Vue({
                    el: "#app",
                    data: {
                        id: '',
                        name: '',
                        keywords: '',
                        list: [
                            { id: 1, name: '奔驰', ctime: new Date() },
                            { id: 2, name: '宝马', ctime: new Date() },
                            { id: 3, name: '路虎', ctime: new Date() }
                        ]
                    },
                    methods: {
                        add() {
                            // 拼接对象
                            var car = { id: this.id, name: this.name, ctime: new Date() }
                            //  push对象
                            this.list.push(car)
                            this.id = this.name = ''
                        },
                        dele(id) {
                            // 根据id找到删除对象的索引  some根据指定的条件判断不知道什么时候能找到,随时可以终止
                            this.list.some((item, i) => {
                                if (item.id === id) {
                                    // 找到索引后删除,直接调用数组的splice方法
                                    this.list.splice(i, 1)
                                    // 在some方法中return true ,就会立即终止这个数组的后续循环
                                    return true
                                }
                            })
                        },
                        search(keywords) {
                            ////1.2includes
                            var newList = this.list.filter(item => {
                                // es6中为字符串提供新的方法,string.prototype.includes('要包含的字符串'),包含返回true不包含返回false
                                // contains选取包含指定字符串的数据
                                if (item.name.includes(keywords)) {
                                    return item
                                }
                            })
                            return newList
                        }
                    }
                })
                var vm1 = new Vue({
                    el: '#app2',
                    data: {
                        dt: new Date()
                    },
                    filters: {
                        //    过滤器调用采用就近原则,如果私有过滤器和全局过滤器名称一样了,优先调用
                        dateFormat: function (dataStr, pattern = '') {
                            var dt = new Date(dataStr)
                            var y = dt.getFullYear()
                            var m = dt.getMonth() + 1
                            var d = dt.getDate()
                            if (pattern.toLowerCase() == 'yyyy-mmm-dd') {
                                return `${y}-${m}-${d}`
                            } else {
                                var hh = dt.getHours()
                                var mm = dt.getMinutes()
                                var ss = dt.getSeconds()
                                return `${y}-${m}-${d} ${hh}:${mm}:${ss}~~~~`
                            }
                        }
                    }
                })
            </script>
        </body>
        
        </html>