学习vue的第八天

过滤器

定义:对要显示的数据进行特点格式化后再显示(适用于一些简单的逻辑处理)。

语法:

  1. 注册过滤器:Vue.filter(name,callback)或new Vue{filters:{}}

  2. 使用过滤器:{{ ××× | 过滤器名}} 或 v-bind:属性 = “××× |过滤器名"

  3. 备注:

    过滤器也可以接收额外参数、多个过滤器也可以串联

    并没有改变原来的数据,是产生新的对应数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>过滤器</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.4/dayjs.min.js"></script>
</head>
<body>
    <div id="root">
     <h3>现在是 :{{time | timeFormater('YYYY_MM_DD ') | mySlice()}}</h3>
    </div>
</body>
<script>
    Vue.filter('mySlice',function(value){
        return value.slice(0,4)
    })
    new Vue({
        el:'#root',
        data:{
            time:1659935901660,
        },
        //局部过滤器
        filters:{
            timeFormater(value,str='YYYY年MM月DD日 HH:mm:ss'){
                return dayjs(value).format(str)
            },
            // mySlice(value){
            //     return value.slice(0,4)
            // }
        }
    })
</script>
</html>

v-cloak

  1. 本质是一个特殊的属性,Vue实例创建完毕并接管容器后,会删除v-cloak属性。

  2. 使用css配合v-cloak可以解决网速慢时页面展现出{{×××}}的问题。

v-once

  1. 加入v-once属性之后,插值语法便不会改变数值

  2. v-once没有值

v-pre

  1. 跳过其所在节点的编译过程。

  2. 可利用它跳过不需要Vue渲染的节点,可加快编译。

自定义指令

顾名思义就是自己定义的指令,要自己操控DOM元素定义指令,有两种形式

  1. 函数式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>自定义指令—函数式</title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
    </head>
    <body>
        <div id="root">
         <h2>{{name}}</h2>
         <h2>当前的值是:<span v-text="n"></span></h2>
         <h2>放大10倍后的n值是:<span v-big="n"></span></h2>
         <button @click="n++">点我n+1</button>
        </div>
    </body>
    <script>
        new Vue({
            el:'#root',
            data:{
                name:'lq',
                n:1
            },
            directives:{
                //big函数什么时候被调用?1.指令与元素成功绑定时(一上来)2.指令所在的模板被重新解析时。
                big(element,binding){
                    element.innerText = binding.value * 10
                }
            }
        })
    </script>
    </html>
  2. 对象式

    当指令要实现一开始就要的效果,即自带属性时,用函数式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body>
    <div id="root">
     <h2>{{name}}</h2>
     <h2>当前的值是:<span v-text="n"></span></h2>
     <h2>放大10倍后的n值是:<span v-big="n"></span></h2>
     <button @click="n++">点我n+1</button>
     <input type="text" v-fbind:value = "n">
    </div>
</body>
<script>
    new Vue({
        el:'#root',
        data:{
            name:'lq',
            n:1
        },
        directives:{
            //big函数什么时候被调用?1.指令与元素成功绑定时(一上来)2.指令所在的模板被重新解析时。
            big(element,binding){
                element.innerText = binding.value * 10
            },
            fbind:{
                //指令与元素成功绑定时
                bind(element,binding){
                element.value = binding.value
                },
                //指令所在的元素被插入页面时
                inserted(element,binding){
                element.focus()
                },
                //指令所在的模板被重新解析时
                update(element,binding){
                    element.value = binding.value
                    element.focus()
                }
            }
        }
    })
</script>
</html>

总结:

  1. 定义语法:

    局部指令:函数式和对象式

    全局指令:

    Vue.directive(指令名,配置对象)或Vue.directive(指令名,回调函数)

  2. 配置对象中常用的三个回调:

    (1).bind:指令与元素成功绑定时调用。

    (2).inserted:指令所在的元素插入页面时调用。

    (3).update:指令所在的模板被重新解析时调用。

  3. 备注:

    (1).指令定义时不加v-,但使用时要加v-。

    (2).指令名如果是多个单词建议用 — 连接,但是定义时要加’ ‘。

    (3).directives里面的this都是指向window。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值