Vue06- 过滤器&键盘修饰符

1、过滤器

概念:Vue允许你自定义过滤器,可被用作一些常见的文本格式化

  • 过滤器的定义语法:

    Vue.filter('过滤器名称', function(){})

    过滤器中的function, 第一个参数已经被规定死了,永远都是过滤器管道符前面传递过来的数据

    全局过滤器需定义在VM实例之前

  • 过滤器调用格式:

    {{ name | 过滤器名称(参数) }}

  • 私有过滤器

    定义在Vue实例filters属性中,只能当前VM实例可以使用,而外部的全局过滤器所有的VM都可使用。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="lib/vue-2.4.0.js"></script>
</head>

<body>
<div id="app">
    <!-- 过滤器基本使用 -->
    <p>{{ msg | msgFormat }}</p>
    <!-- 过滤器传参 -->
    <p>{{ msg | msgFormat2('身影', 'XX') }}</p>
    <!-- 多个过滤器 -->
    <p>{{ msg | msgFormat2('身影') | msgDeal }} </p>
</div>

<div id="app2">
    <!-- 当私有过滤器和全局过滤器同名时,默认优先使用私有过滤器 -->
    <p> {{ msg | dataFormat }}</p>
</div>

<script>
    Vue.filter('msgFormat', function (msg) {
        //return msg.replace('青草', 'xx');
        // replace()方法的第一个参数接受 正则匹配
        return msg.replace(/青草/g, 'xx');
    });

    Vue.filter('msgFormat2', function (msg, arg1, arg2) {
        return msg.replace(/青草/g, arg1 + arg2);
    });

    Vue.filter('msgDeal', function (msg) {
        return msg + '====End';
    });

    var vm = new Vue({
        el: '#app',
        data: {
            msg: '四周没有青草,底下没有青草 没有脉动的声音,只有自己的心脏捶打着地面'
        },
        methods: {}
    });

    var vm2 = new Vue({
        el: '#app2',
        data: {
            msg: '那诱发我的是青草是新生时候的香味'
        },
        methods: {},
        filters: {   // 定义私有过滤器 【过滤器名称 & 处理函数】
            dataFormat: function (data) {
                return data + '~~~';
            }
        }
    });
</script>
</body>
</html>

2、日期格式化

使用过滤器实现日期格式化。

// 调用:{{ time | dataFormat }}
Vue.filter('dataFormat', function (dataStr) {
    // 根据跟定的字符串,得到固定的时间
    var dt = new Date(dataStr);
    var year = dt.getFullYear();
    // padStart()  补充长度
    var month = (dt.getMonth() + 1).toString().padStart(2, '0');  // 月份以两位来显示
    var date = dt.getDate();
    var hour = dt.getHours();
    var minute = dt.getMinutes();
    var second = dt.getSeconds();

    // 用单反引号,让字符串里${xxx}翻译
    return `${year}-${month}-${date} ${hour}:${minute}:${second}`;
});

3、按键修饰符

在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符

<!-- 在键盘上的是 `Enter` 弹起时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<input v-on:keyup.13="submit">
  • 按键码

    按键事件.数字 也是被允许的,这里的数字就是键盘按键对应的编码值,可参考 入口

    Vue 提供了绝大多数常用的按键码的别名:

    • .enter
    • .tab
    • .up
    • .down
    • .left
    • .right
  • 自定义按键修饰符别名

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112
  • 组合键
    • .ctrl
    • .alt
    • .shift
    • .meta Mac系统键盘上,对应command 键 (⌘)。 Windows 系统键盘对应Windows徽标键 (⊞)。
<!-- Alt + C -->
<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

4、鼠标按钮修饰符

​ 这些修饰符会限制处理函数仅响应特定的鼠标按钮。

  • .left
  • .right
  • .middle

5、v-model 示例

<label>
    搜索名称关键字:
    <input type="text" class="form-control" v-model="keywords">
</label>

<!-- 页面上input框的内容一旦有改变,会触发调用`search(keywords)`方法,然后重新渲染页面 -->
<tr v-for="item in search(keywords)" :key="item.id">
    <td>{{ item.id }}</td>
    <td v-text="item.name"></td>
    <td>{{ item.ctime | dataFormat }}</td>
    <td>
        <a href="" @click.prevent="del(item.id)">删除</a>
    </td>
</tr>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            keywords: '',   // 搜索关键字
            list: [
                { id: 1, name: '河湾里 ', ctime: new Date() },
                { id: 2, name: '芦花村', ctime: new Date() },
                { id: 3, name: '子贡岭 ', ctime: new Date() },
            ]
        },
        methods: {
            search(keywords) {
                return this.list.filter(item => {
                    if (item.name.includes(keywords)) {
                        return item;
                    }
                });
            }
        }
    });
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值