Vue学习—深入剖析v-bind指令

一、v-bind指令

1.动态绑定特性

1.绑定一个属性

<div id="app">
    <div v-bind:set='type'></div>//type为我们设置的参数attr
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            type: 'attr'
        }
    })
</script>

在这里插入图片描述

2.动态特性名 (2.6.0+)

<div id="app">
    <div v-bind:[set]='type'></div>//特性名和特性值都通过参数设置
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            set: 'attrName',
            type: 'attr'
        }
    })
</script>

在这里插入图片描述

3.v-bind缩写

如果某些情况下需要绑定多个特性,会导致代码冗余

<div id="app">
    <div v-bind:[set]='type' v-bind:[make]='spec'></div>
</div>

于是:

<div id="app">
    <div v-bind:[set]='type' :makeName='spec'></div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            set: 'attrName',
            type: 'attr',
            spec: 'special'
        }
    })
</script>

在这里插入图片描述

4.内联字符串拼接

<div id="app">
    <img :src="'/path/to/images/' + fileName">
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            fileName: '1.png'
        }
    })
</script>

在这里插入图片描述

5.无参数

没有参数时,可以绑定到一个包含键值对的对象。注意此时 class 和 style 绑定不支持数组和对象。

<div id="app">
    <img v-bind="{name: 'jimo',age: '18'}">
</div>

在这里插入图片描述

2.绑定class

1.对象语法

<div id="app">
    <div v-bind:class="{ red: isRed }"></div>//判断isRed的值
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            isRed: true
        }
    })
</script>

在这里插入图片描述

2.数组语法

  • 我们可以把一个数组传给 v-bind:class,以应用一个 class 列表
<div id="app">
	<div v-bind:class="['classA', 'classB']"></div>
    <div v-bind:class="[classA, classB]"></div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            classA: 'red',
            classB: 'green'
        }
    })
</script>

在这里插入图片描述

  • 在数组语法总可以使用三元表达式来切换class
<div id="app">
    <div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            isActive: true,
            activeClass: 'red',
            errorClass: 'green'
        }
    })
</script>

在这里插入图片描述

  • 在数组语法中可以使用对象语法(可以与普通 class 共存)
<div id="app">
    <div v-bind:class="[classA, { classB: isB, classC: isC }]"></div>
    <div v-bind:class="classA" class="red"></div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            classA: 'pick',
            classB: 'red',
            classC: 'green',
            isB: !false,
            isC: ''
        }
    })
</script>

在这里插入图片描述

3.绑定style

1.使用对象语法

看着比较像CSS,但其实是一个JavaScript对象
CSS属性名可以用驼峰式(camelCase)或者短横线分隔(kebab-case)来命名
但是使用短横线分隔时,要用引号括起来

<div id="app">
    <div v-bind:style="{ fontSize: size + 'px' }">字体</div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            size: 19
        }
    })
</script>

在这里插入图片描述

  • 也可以直接绑定一个样式对象,这样模板会更清晰
<div id="app">
    <div v-bind:style="styleObj">字体</div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            styleObj: {
                color: 'red',
                fontSize: '18px'
            }
        }
    })
</script>

在这里插入图片描述

2.使用数组语法

数组语法可以将多个样式对象应用到同一个元素

<div id="app">
    <div v-bind:style="[styleObjA,styleObjB]">字体</div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            styleObjA: {
                color: 'red',
                fontSize: '18px'
            },
            styleObjB: {
                border: '1px solid red'
            }
        }
    })
</script>

在这里插入图片描述

  • 自动添加前缀
    绑定style时,使用需要添加浏览器引擎前缀的CSS属性时,如 transform,Vue.js会自动侦测并添加相应的前缀。

  • 多重值
    从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值
    例:

<div id="app">
    <div :style="{display:['-webkit-box','-ms-flexbox','flex']}"></div>
</div>

在这里插入图片描述
这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。

4.修饰符

修饰符 (modifier) 是以英文句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。

1…camel

<div id="app">
    <svg :viewBox='viewBox'></svg>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            viewBox: '0 0 100 100'
        }
    })
</script>

在这里插入图片描述

<div id="app">
    <svg :view-box.camel='viewBox'></svg>
</div>

在这里插入图片描述

2…prop

被用于绑定 DOM 属性 (property)

const demo = document.getElementById('app');
for(let key in demo){
    console.log(key);//这些就是属性
}

在这里插入图片描述

<div v-bind:text-content.prop="text"></div>

3…sync

讲解组件时再说

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值