关于Vue中新老版本slot插槽,属性验证validator,过滤器fliter的用法

关于Vue中新老版本slot插槽,属性验证validator,过滤器fliter的用法

1、插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制

1-1、老版本slot插槽:

<body>
    <div id="app">
        <Okay>
            <!-- 在组件里面写template是不会被渲染的,只会渲染下面的p标签 -->
            <!-- 这里的slot可以将这个模板与下面的模板联系起来,slotProp用来
            接收下面绑定在模板slot上的 :msg属性,那么对应的数据也会得到,这
            个slotProp可以随意书写,插槽默认插槽名为default -->
            <template slot="default" slot-scope="slotProp">
                <!-- 然后,msg就可以当作slotProp的属性'.'来操作了 -->
                <p>{{ slotProp.msg }}</p>
            </template>
        </Okay>
    </div>
    <!-- 这个模板是预留给未来数据的,用的插槽 -->
    <template id="okay">
        <div>
            <!-- :msg单向数据绑定 -->
            <!-- 上面的 slot="default"用了这里slot的name名,所以这里的slot
            就指向了上面的template,这里给插槽取name,也就是具名插槽-->
            <slot name="default" :msg="msg"></slot>
        </div>
    </template>
</body>
    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
    <script>
        Vue.component('Okay',{//这里是对okay组件进行注册,组件名
            template:'#okay',//这里是组件的配置项
            data(){//这里data用函数的形式是为了产生一个自己的私有作用域,来
            //存储自己的数据
                return {
                    msg:'hello the world'
                }
            }
        })
        new Vue({
            el:'#app'
        })
    </script>

1-2、新版slot插槽

<body>
    <div id="app">
        <Hahaha>
            <!-- 这里一般用v-slot:default,相比旧版本,就这里有些许变化
            v-slot指令融合了插槽名slot=""和作用域插槽slot-scope=""
            而且,用v-slot指令,是必须在外层写template的,指令写在这个标签里 -->
            <template v-slot:name="slotProp">
                <p>{{ slotProp.msg }}</p>
            </template>
        </Hahaha>
    </div>

    <template id="hahaha">
        <div>
            <slot name="name" :msg="msg"></slot>
        </div>
    </template>

</body>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
    Vue.component('Hahaha',{
        template:'#hahaha',
        data(){
            return {
                msg:'哈哈哈'
            }
        }
    })

    new Vue({
    }).$mount('#app')
</script>

2、属性验证:

  1. props: [ ‘msg’ ] 没有进行验证,只是单纯的接收了一个父组件传递来的数据
  2. props: { attr: attrType } 进行普通属性验证
  3. props: { type: typeType, default: value } 这里的default是为这个属性设置初始值
  4. props: { validator ( val ) { return boolean }} 可以进行一个条件的比较
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>

<body>
    <div id="app">
        <father></father>
    </div>

    <template id="father">
        <div>
            <h3>这里是父组件</h3>
            <son :aa="money" v-bind:bb="like"></son>
            <!-- 这里的aa,bb单向绑定了父组件的数据 -->
        </div>
    </template>
    <template id="son">
        <div>
            <h3>这里是子组件</h3>
            <!-- 所以这里就可以用父组件的数据了 -->
            <p> 老爸给了我{{aa}}块 </p>
            <p>我喜欢打 {{ bb }}</p>
        </div>
    </template>
</body>
    <script>
        Vue.component('father',{
            template:'#father',
            data(){
                return {
                    money:5000,
                    like:'basketball'
                }
                    
            }
        })

        Vue.component('son',{
            template:'#son',
            // props:['aa','bb']
            props:{//props用来接收父子组件由父组件传来的数据
                'aa':{

                    validator(val){
                        return val>1000
                    }
                },
                'bb':String
            }
        })

        new Vue({
            el:'#app'
        })
    </script>

3、过滤器filter

什么是过滤器? 用来格式化数据的一个函数(过滤器是对已经有的数据进行格式化,也就是必须先有数据,再去格式化)

vue 1.x 版本借鉴了 angular , 提供 10 个过滤器, 包括有: 日期 小数点位数保留 货币 大小写 等

Vue 2.x 废弃了这 10个过滤器,但是它提供了自定义过滤器的方式

全局写法:

<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>

<body>

    <div id="app">
        <!-- 这里time是下面的时间戳,‘|’是管道符,用来获取val数据的。 -->
        <!-- 可以自己选择连接的type符号 -->
        <p>{{ time | timefilter('/') }}</p>
    </div>

</body>
    <script>

        Vue.filter('timefilter', function( val , type ){
            //timefilter是过滤器的名称,function是回调函数,这里面的val指的就是上面p标签里面的time值。
            console.log(val)//1561546971840
            var date=new Date( val )
            return date.getFullYear() + type + (date.getMonth() + 1)+ type +date.getDate()
        })

        new Vue({
            el:'#app',
            data:{
            time: Date.now()//获取当前时间戳
            }
        })
    </script>

局部写法:

<body>
  <div id="app">
    <p> {{ time | timeFilter('/')}} </p>
  </div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      time: Date.now()
    },
    filters: { //过滤器的配置项
      'timeFilter': function ( val,type ){
        var date = new Date ( val )
        return date.getFullYear() + type + ( date.getMonth() + 1 ) + type + date.getDate()
      }
    }
  })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值