【Vue学习笔记】vue的系统指令与修饰符

什么是指令?

指令就是再vue中 使用v-前缀的html特殊属性 指令就是用来扩展再vue中标签的功能

语法: 写在开标前 v-指令=“指令值”

Vue基本指令

差值表达式 又叫声明式渲染/文本差值
语法:{{表达式}}

属性指令

v-bind

功能:可以让html标签里的**属性(名和值)**变成动态的从data中获取
<div v-bind:id="dynamicId"></div>

v-bind可以简写为 :

内容指令

让标签的内容变成动态的

v-text 转义输出

v-text="数据名"
功能:可以让html标签里的内容变成动态的(从data中获取),相当于innerText

对比v-text和插值({{}})表达式:
插值表达式更加灵活,可以在标签里面的某个地方显示,但是v-text会让整个标签的内容全部变化。

v-html 非转义输出(原封不动进行替换)

v-html="数据"
功能:可以让html标签里的内容变成动态的(从data中获取),但是不会对内容中的html标签进行转义。相当于innerHTML

注:
双花括号和 v-text(相当于innerText)会将数据解释为普通文本。 v-html相当于innerHTML

<!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>Document</title>
</head>
<body>
    <!-- 
        都是用来绑定标签中的内容
        v-html:等价于在页面以字符串拼接的方式添加节点内容
        v-txex:
    -->
    <div id="root">
        <!-- <div>
        为什么不能通过{{}}直接添加HTML代码?
        因为如果第三方有恶意脚本的话,那么可能会对页面造成安全威胁,怕xss攻击
        v-html保证页面一定是通过程序员编写的
          {{mySrc}}
        </div> -->
        <div v-html="mySrc"></div>
        
        <!-- <div>
            {{myTest}}
        </div> -->
        <div v-text="myTest"></div>
    </div>
</body>
</html>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
    // Vue.config.productionTip = false;
    
    let vm = new Vue({
        el:"#root",
        data:{
            mySrc:`<ul>
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                    <li>5</li>
                </ul>`,
            myTest:'今天星期一'
        }
    });

</script>

条件渲染指令

v - if、v-else-if、v-else

功能:v-if是动态的向DOM树内添加或者删除DOM元素

这三个指令与JavaScript的条件语句 if、else、else if 类似 Vue
的条件指令可以根据表达式的值在DOM中渲染或销毁元素或组件

v-show

功能:v-show本质就是标签display设置为none,控制隐藏

v-if和 v-show的区别?

相同点:
v-show和 v-if都是 控制 dom元素 的 显示和隐藏 的。

不同点:
1、原理不同:
v-if是通过dom元素的删除和添加,来完成显示和隐藏, ​
v-show是通过修改样式属性display的值,来完成显示和隐藏。 2、性能消耗的不同 ​
v-if的性能损耗体现在切换时, ​
v-show的性能损耗在首次(特别是首次处于的显示的情况下)

3、使用场景的不同 ​ v-if使用在元素切换不频繁的场景。 ​ v-show使用在元素切换频繁的场景。

4、安全性的不同 ​ v-if的安全性好 ​ v-show的安全性不好。

<!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>Document</title>
    <style>
        #box{
            width: 100px;
            height: 100px;
            background-color: red;
        }
        #box1{
            width: 100px;
            height: 100px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="root">
        <!-- 事件的绑定v-on -->
        <button v-on:click="fun">切换</button>
        <div id="box" v-show="isShow"></div>
        <!-- <div id="box1" v-if="isIf"></div> -->

        <!-- 
			另外,v-if指令还可以结合v-else-if , v-else一起使用
		-->
        <p v-if="age>15">大宝</p>
        <p v-else-if="age==15">中宝</p>
        <p v-else>小宝</p>
    </div>
</body>
</html>

<script src="./node_modules/vue/dist/vue.js"></script>

<script>
    let vm = new Vue({
        el:".root",
        data:{
            isShow:false,
            isIf:false,
            age:15
        },
        methods:{
            fun:function(){
                // this就是vm实例对象
                // console.log(this);
                this.isShow = !this.isShow;
            }
        }
    });
</script>

列表渲染(循环指令)

v-for

功能:把数据进行循环显示在html里(渲染)。推荐操作的数据类型:数组、对象、字符串、数字
语法:

用in或者用of都可以:
<li v-for="值 in 数据" v-bind:属性="值">{{值}}</li>
<li v-for="值 of 数据">{{值}}</li>

<!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>Document</title>
    <style>
        li{
            list-style: disc;
        }
    </style>
</head>
<body>
    <div class="root">
        <!-- 用in和of都行 -->

        <!-- 数字 -->
        <!-- <ul >
            <li v-for="(v,index) in len">{{v}}-{{index}}</li>
        </ul> -->

        <!-- 字符串 -->
        <!-- <ul>
            <li v-for="(v,index) in str">{{v}}-{{index}}</li>
        </ul> -->

        <!-- 数组 -->
        <!-- <ul>
            <li v-for="(v,index) in hobby" :key="">{{v}}-{{index}}</li>
        </ul> -->

        <!-- 对象 -->
        <!-- <ul>
            <li v-for="(v,index) in score">{{v}}-{{index}}</li>
        </ul> -->

        <!-- 数组对象的嵌套 -->
        <ul >
            <li v-for="(v,index) in arr" :key="index">
                {{v}}
                <ul>
                    <li v-for="(v1,index1) in v" :key="index1">
                        {{v1}}
                    </li>
                </ul>
            </li>
        </ul>
    </div>
</body>
</html>

<script src="./node_modules/vue/dist/vue.js"></script>

<script>
    let vm = new Vue({
        el:".root",
        data:{
            len:10,
            str:"helloworld",
            hobby:["吃饭","睡觉,"rap","篮球"],
            score:{
                english:100,
                math:98
            },
            arr:[
                {a:1,b:11},
                {a:22,b:22},
                {a:33,b:33}
            ]
        }
    });
</script>

注意:

1、空数组,null,undefined不循环

2、也可以进行循环嵌套

3、v-for和v-if使用在同一个标签里时,v-for 的优先级比 v-if 更高,即:v-for套着v-if,先循环再判断

列表渲染时的key:

在标签里使用属性key,可以唯一标识一个元素
1、当 Vue.js 用 v-for 更新已渲染过的元素列表时,它默认用“就地复用”策略。即:尽量不进行dom元素的操作,只替换文本

2、如果你希望不进行dom操作,就用key(key不要使用下标),因为key的目的是为了唯一标识一个元素
有了key后,可以跟踪每个节点的身份,从而重用和重新排序现有元素

建议尽可能在使用 v-for 时提供 key attribute,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为(就地复用)以获取性能上的提升。

注意:

key不要使用(数组)下标,并不是会报错,而是失去了唯一标识的意义

事件绑定(指令)

v-on

功能:绑定事件,vue通过v-on指令把事件和处理函数进行绑定。

 v-on指令可以简写为:@   
 事件处理函数需要放在`methods`选项当中去,事件名 不带on,函数可以按照ES5的写法,也可以按照ES6的写法。

语法:

<input type="button" v-on:事件名="方法" >
<input type="button" v-on:事件名="方法(参数)" >
<input type="button" v-on:事件名="方法($event,参数)">

其他

v-cloak

功能:防闪烁,模板没编译完,电脑配置差,网速慢等等,有可能会看到{{}},体验不佳,不如用css先隐藏,之后再显示,包括被包裹的子元素。这个指令保持在元素上直到关联实例结束编译。和 CSS 规则,如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。

v-once

功能:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

修饰符

在程序世界里,修饰符是用于限定类型以及类型成员的声明的一种符号

在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理

事件修饰符v-on

  • .stop 当事件触发时,阻止事件冒泡
  • .prevent 当事件触发时,阻止元素默认行为
  • .capture 当事件触发时,阻止事件捕获
  • .self 限制事件仅作用于节点自身
  • .once 事件被触发一次后即解除监听
  • .passive 移动端,限制事件用不调用preventDefault()方法

按键修饰符@keyup

.delete 回格 / 删除
.tab 制表
.enter 回车
.esc 退出
.space 空格
.left 左
.up 上
.right 右
.down 下

v-model的修饰符

  • .lazy 默认情况下,v-model同步输入框的值和数据。可以通过这个修饰符,转变为在change事件再同步。
  • .number 自动将用户的输入值转化为数值类型
  • .trim 自动过滤用户输入的首尾空格

鼠标修饰符

  • .left 左键
  • .right 右键
  • .middle 中键

组合修饰符

  • .ctrl Ctrl键
  • .alt Alt键
  • .shift Shift键
  • .meta meta键(Windows系统键盘上为田键)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ـ٨ـﮩﮩ٨ـ千帆ﮩ٨、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值