盘点Vue基础指令

Vue.js 指令

本质上就是 HTML 自定义属性
Vue.js 的指令就是以 v- 开头的自定义属性

内容处理

v-once 指令

使元素内部的插值表达式只生效一次

<div id="app">
    <p>此内容会自动更改:{{ content }}</p>
    <p v-once>此内容不会随数据变化自动更改:{{ content }}</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        content: "内容文本"
    }
})
</script>

v-text 指令

元素内容整体替换为指定纯文本数据

<div id="app">
    <p v-text="content">此内容会被覆盖</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        content: "内容文本"
    }
})
</script>

v-html 指令

元素内容整体替换为指定的 HTML 文本

<div id="app">
    <p v-html="content">此内容会被覆盖</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        content: "<span>内容文本</span>"
    }
})
</script>

属性绑定

v-bind 指令

v-bind 指令用于动态绑定 HTML 属性

<div id="app">
    <p v-bind:title="title">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        title: "这是title属性内容"
    }
})
</script>

Vue.js 还为 v-bind 指令提供了简写方式

<div id="app">
    <p :title="title">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        title: "这是title属性内容"
    }
})
</script>

如果需要一次绑定多个属性,还可以绑定对象

<div id="app">
    <p v-bind="attrObj">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        attrObj: {
            id: 'box',
            title: '示例内容'
        }
    }
})
</script>

与插值表达式类似,v-bind 中也允许使用表达式

<div id="app">
    <p :class=" 'demo' + 3 ">标签内容</p>
    <p :class=" prefix + num ">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        prefix: 'demo',
        num: 5
    }
})
</script>
Class 绑定

class 是 HTML 属性,可以通过 v-bind 进行绑定,并且可以与 class 属性共存

<div id="app">
    <p v-bind:class="cls">标签内容</p>
    <p class="a" :class="cls">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        cls: 'x'
    }
})
</script>

对于 class 绑定,Vue.js 中还提供了特殊处理方式

<div id="app">
    <p :class="{ b: isB, c: isC, 'class-d': true }">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        isB: true,
        isC: false
    }
})
</script>

对于 class 绑定,Vue.js 中还提供了特殊处理方式

<div id="app">
    <p :class="[ 'a', {b: isB}, 'c' ]">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        isB: true
    }
})
</script>
Style 绑定

style 是 HTML 属性,可以通过 v-bind 进行绑定,并且可以与 style 属性共存
对于 class 绑定,Vue.js 中还提供了特殊处理方式

<div id="app">
    <p :style="styleObj">标签内容</p>
    <p style="width:100px;" :style="styleObj">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        styleObj: {
            width: "200px",
            hetght: "100px",
            border: "1px solid #ccc"
        }
    }
})
</script>

当我们希望给元素绑定多个样式对象时,可以设置为数组

<div id="app">
    <p :style="[ styleObj1, styleObj2 ]">标签内容</p>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        styleObj1: {
            width: "200px",
            hetght: "100px"
        },
        styleObj1: {
            border: "1px solid #ccc",
            color: "bule"
        }
    }
})
</script>

渲染指令

v-for 指令

用于遍历数据渲染结构,常用的数组与对象均可遍历

<div id="app">
    <ul>
        <li v-for="item in arr"> {{ item }} </li>
    </ul>
    <ul>
        <li v-for="value in obj"> {{ value }} </li>
    </ul>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        arr: ["内容1", "内容2", "内容3"],
        obj: {
            content1: "内容1",
            content2: "内容2",
            content3: "内容3"
        }
    }
})
</script>

使用 v-for 的同时,应始终指定唯一的 key 属性,可以提高渲染性能并避免问题

<div id="app">
    <ul>
        <li v-for="item in arr" :key="item.id"> {{ item }} </li>
    </ul>
</div>
<!-- ===================================== -->
<script>
var vm = new Vue({
    el: "#app",
    data: {
        arr: [
            {
                id: 1,
                content: "内容1"
            },
            {
                id: 2,
                content: "内容2"
            }
        ]
    }
})
</script>

通过 <template> 标签设置模板占位符,可以将部分元素或内容作为整体进行操作

<div id="app">
    <template v-for="item in items">
        <span>标签内容</span>
        <span>标签内容</span>
    </template>
</div>

v-show 指令

用于控制元素显示与隐藏,适用于显示隐藏频繁切换时使用

<div id="app">
    <p v-show="true">这个元素会显示</p>
    <p v-show="false">这个元素会隐藏</p>
</div>

<template> 无法使用 v-show 指令

v-if 指令

用于根据条件控制元素的创建与移除

<div id="app">
    <p v-if="false">这个元素不会创建</p>
    <p v-else-if="true">这个元素会创建</p>
    <p v-else="else">这个元素不会创建</p>
</div>

给使用 v-if 的同类型元素绑定不同的 key

处于性能考虑,应避免将 v-if 与 v-for 应用于同一标签

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值