Vue的内置指令

1 v-show:根据表达式的真假值来显示和隐藏元素

v-show根据表达式的真假值来显示和隐藏元素,它通过样式的display控制标签的显隐。

在下面的示例中,第一个p标签不设置该属性,第二个p标签设置v-showtrue,第三个p标签设置v-showfalse,最后的结果是显示前两个p标签,第三个不显示,示例代码如下:

<div id="app">
    <p>我是橘猫吃不胖</p>
    <p v-show="show">AAAAA</p>
    <p v-show="hide">BBBBB</p>
</div>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            show: true, // 显示AAAAA
            hide: false // 隐藏AAAA
        }
    })
</script>

在这里插入图片描述
除此之外,可以动态的修改v-show的属性值,示例代码如下:

<div id="app">
    <p>我是橘猫吃不胖</p>
    <p v-show="show">AAAAA</p>
    <p v-show="hide">BBBBB</p>
</div>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            show: true,
            hide: false
        }
    })
    // 每隔1秒修改hide的值,达到在屏幕上闪烁的效果
    window.setInterval(function () {
        vm.hide = !vm.hide
    }, 1000)
</script>

请添加图片描述

2 v-html:插入标签

v-html会向指定节点中渲染包含html结构的内容,它与插值语法的区别是:v-html会替换掉节点中所有的内容,插值语法则不会,并且v-html可以识别html结构。

示例代码:

<div id="app">
    <div v-html="str"></div>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            str: "<h3>橘猫吃不胖</h3>"
        }
    })
</script>

在这里插入图片描述

3 v-text:在元素当中插入值

v-text向其所在的节点中渲染文本内容,它与插值语法{{}}的区别是:v-text会替换掉元素中所有的内容,但是插值语法不会。

示例代码:

<div id="app">
    <!-- 插值语法 -->
    <div>{{name}}</div>
    <!-- 即使元素中有内容,但是仍旧会被替换掉 -->
    <div v-text="name">aaaaaaa</div>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            name: "橘猫吃不胖"
        }
    })
</script>

在这里插入图片描述

4 v-if和v-else:根据表达式的真假值来动态插入和移除元素

v-ifv-else可以根据表达式的真假值来动态插入和移除元素。

示例:根据不同的表达式真假值显示不同的效果,当role设置为0的时候,显示超级管理员

<div id="app">
    <p v-if="role == 0">超级管理员</p>
    <p v-else-if="role == 1">普通管理员</p>
    <p v-else>账户已停用</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            role: 0 // 设置role的值
        }
    })
</script>

在这里插入图片描述
当设置role为1时,显示普通管理员

<div id="app">
    <p v-if="role == 0">超级管理员</p>
    <p v-else-if="role == 1">普通管理员</p>
    <p v-else>账户已停用</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            role: 1 // 设置role的值
        }
    })
</script>

在这里插入图片描述
当role不为0或者1时,显示账户已停用

<div id="app">
    <p v-if="role == 0">超级管理员</p>
    <p v-else-if="role == 1">普通管理员</p>
    <p v-else>账户已停用</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            role: 3 // 设置role的值
        }
    })
</script>

在这里插入图片描述

5 v-for:根据变量的值来循环渲染元素

v-for可以根据变量的值来循环渲染元素。

示例:v-for指令遍历数组

<div id="app">
    <span v-for="i in arr"> {{ i }} </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            arr: [11, 22, 33, 44] // 定义arr数组
        }
    })
</script>

在这里插入图片描述
示例:v-for遍历数组及数组中元素的索引

<div id="app">
    <span v-for="(i , index) in arr"> {{ index }} : {{ i }} </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            arr: [11, 22, 33, 44] // 定义arr数组
        }
    })
</script>

在这里插入图片描述
示例:v-for指令遍历对象

<div id="app">
    <span v-for="i in obj"> {{ i }} </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            obj: { // 定义对象
                "a": 1,
                "b": 2,
                "c": 3
            }
        }
    })
</script>

在这里插入图片描述示例:v-for遍历对象的属性名及属性值

<div id="app">
    <span v-for="(item,key) in obj">
        {{ key }}:{{ item }}
    </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            obj: { // 定义对象
                "a": 1,
                "b": 2,
                "c": 3
            }
        }
    })
</script>

在这里插入图片描述
示例:v-for遍历对象的索引、属性名及属性值

<div id="app">
    <span v-for="(item,key,index) in obj">
        {{ index }}—{{ key }}:{{ index }}
    </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            obj: { // 定义对象
                "a": 1,
                "b": 2,
                "c": 3
            }
        }
    })
</script>

在这里插入图片描述
示例:v-for遍历对象数组

<div id="app">
    <span v-for="item in obj">
        {{ item }}
    </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            obj: [
                { name: "张三", age: 20 },
                { name: "李四", age: 21 },
                { name: "王五", age: 22 }
            ]
        }
    })
</script>

在这里插入图片描述
示例:v-for指令遍历对象数组的具体内容

<div id="app">
    <span v-for="item in obj">
        {{ item.name }}
        {{ item.age }}
    </span>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            obj: [
                { name: "张三", age: 20 },
                { name: "李四", age: 21 },
                { name: "王五", age: 22 }
            ]
        }
    })
</script>

在这里插入图片描述
示例:v-for遍历常量

<div id="app">
    <span v-for="i in 5">
        {{ i }}
    </span>
</div>
<script>
    var vm = new Vue({
        el: "#app"
    })
</script>

在这里插入图片描述

6 v-bind:单向绑定绑定元素的属性

v-bind可以绑定元素的属性并执行相应的操作,它可以简写为:。未使用v-bind绑定之前,属性后面的内容是普通字符串,比如<a href="link">去百度</a>href后的link是一个字符串,达不到跳转的目的;使用v-bind绑定属性之后,href属性之后的link是一个表达式,例如<a v-bind:href="link">去百度</a>,这样就可以进行跳转。

示例:使用v-bind绑定a标签的href属性,使链接生效

<div id="app">
    <!-- 另一种写法:<a :href="link">去百度</a> -->
    <a v-bind:href="link">去百度</a>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            link: "https://www.baidu.com"
        }
    })
</script>

7 v-on:监听元素事件,并执行相应的操作

v-on用来监听元素事件,并执行相应的操作,它可以简写为@,语法如下:

<!-- 不传递参数 -->
<button v-on:click="事件名"></button>
<!-- 需要传递参数 -->
<button v-on:click="事件名($event, 参数1, 参数2...)"></button>
<!-- $event表示事件对象 -->

注意:
(1)事件的回调需要配置在methods对象中,最终会在Vue实例上;
(2)methods中配置的函数,不可以使用箭头函数,否则会改变this的指向;
(3)methods中配置的函数,都是被Vue管理的函数,this指向Vue实例或组件实例对象;
(4)如果需要传递参数,可以使用$event对事件对象event来进行占位;

示例:使用v-on绑定一个事件

<div id="app">
    <button v-on:click="myClick">点击</button>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        methods: {
            myClick: function () {
                console.log("点击了按钮");
            }
        }
    })
</script>

在这里插入图片描述
示例:v-on绑定多个事件

<div id="app">
    <button v-on="{
        click: myClick,
        mouseenter: mouseEnter,
        mouseleave: mouseLeave
    }">点击</button>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        methods: {
            myClick: function () {
                console.log("点击了按钮");
            },
            mouseEnter: function () {
                console.log("鼠标进入按钮");
            },
            mouseLeave: function () {
                console.log("鼠标移出按钮");
            }
        }
    })
</script>

在这里插入图片描述

8 v-model:实现了数据和视图的双向绑定

v-model可以实现数据和视图的双向绑定,它只能应用在表单类元素上(输入类元素),如inputselect等。v-model:value可以简写为v-model,因为v-model默认收集的就是value值。

Vue中有两种数据绑定的方式:

  1. 单向绑定v-bind,数据只能从data流向页面。
  2. 双向绑定v-model,数据不仅能从data流向页面,还可以从页面流向data

示例:v-modelinput进行绑定,选择性别后在下方显示选择

<div id="app">
    <p>请选择你的性别:</p>
    <input type="radio" value="" v-model="gender"><input type="radio" value="" v-model="gender"><p>您选择的性别是:{{ gender }}</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            gender: ""
        }
    })
</script>

请添加图片描述
示例:v-model与选择器绑定,在下方显示选择的值

<div id="app">
    <p>请选择你的幸运数字:</p>
    <select v-model="number">
        <option>1</option>
        <option>2</option>
    </select>
    <p>你的选择是:{{ number }}</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            number: ""
        }
    })
</script>

请添加图片描述
示例:与textarea绑定,当textarea中的值变化时,也同步显示在页面上

<div id="app">
    <textarea v-model="content"></textarea>
    <p>文本框中内容:{{ content }}</p>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            content: "今天是个好日子" // 设置textarea初始就是有值的
        }
    })
</script>

请添加图片描述

9 v-once:让元素或组件只渲染一次

v-once指令可以让元素或组件只渲染一次,并跳过之后的更新。

示例代码:

<div id="app">
    <h3>v-once</h3>
    <input type="text" v-model="voncetext" />
    <p>{{voncetext}}</p>
    <p v-once>{{voncetext}}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            voncetext: "测试v-once"
        }
    })
</script>

请添加图片描述
两个p标签,input中使用了v-model双向绑定了对象属性voncetext
(1)在没有使用v-once的时候,输入框的值改变了,p标签的内容也会随之改变
(2)在使用v-once的时候,输入框的值改变了,p标签的内容不会改变

10 v-pre:跳过这个元素和它的子元素的编译过程

v-pre指令用于跳过这个元素和它的子元素的编译过程。对于大量没有指令的节点使用v-pre指令可以加快编译速度。换句话说,我们的代码写了什么样,页面上就显示什么样。

示例:给h1使用v-pre指令,导致插值语法不再编译

<div id="app">
    <h1 v-pre>{{ message }}</h1>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            message: '橘猫吃不胖'
        }
    })
</script>

在这里插入图片描述

11 v-cloak:解决初始化慢而导致页面闪动

插值表达式存在“闪动”的问题:vue.js文件没有加载完成时,在页面上上会出现 “{{message}}”的字样,等到vue创建实例、编译模板时,DOM就会被替换掉,过程中屏幕上会出现闪动一下。v-cloak指令可以解决初始化慢而导致页面闪动的问题,隐藏尚未完成编译的 DOM 模板。

v-cloak会保留在所绑定的元素上,直到相关组件实例被挂载后才移除。配合像[v-cloak] { display: none }这样的CSS规则,它可以在组件编译完毕前隐藏原始模板。具体如下:

<div v-cloak>
	{{ message }}
</div>
[v-cloak] {
  display: none;
}

示例代码:

<div id="app" v-cloak>{{message}}</div>
<style>
    [v-cloak] {
        display: none;
    }
</style>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: "this is a book"
        }
    })
</script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值