[Vue2]Vue指令

发布于:2025-03-28 ⋅ 阅读:(36) ⋅ 点赞:(0)

简介

    vue指令的特征是都有着 "v-" 前缀,其本身也是一个属性,不同属性对应不同功能。我们可以来到vue的官网查看:

v-html

    在之前的文章中我们介绍到了简单基础的vue实例中,我们可以通过插值表达式来动态渲染页面文本。但是我们想要动态渲染元素(也就是标签)时,插值表达式就不能正确地将代码文本识别成元素:

    如果我们想要识别代码文本,将其动态渲染成元素,可以使用v-html指令。 

    注意,v-html要用在<div>盒子中:

v-show和v-if 

    v-show和v-if都是控制元素的显示与隐藏。但两者底层上不一样。

v-show:通过控制元素的属性 display:none 来控制显示隐藏。即使隐藏,在客户端的浏览器中会获取到该元素的相关数据。

v-if:根据条件控制元素的 创建 与 移除。当判定为隐藏时,客户端的浏览器中不会获取到该元素的相关数据。

    这是显示时的状态:

    现在还看不出太多。我们来到控制台: 

    我们在控制台给flag赋值为false后:

     可以看到由v-if控制的盒子元素被移除了,网页数据变成了一行空注释。

使用场景:  

    v-show适用于局部加载的场景,比如csdn左上角的个人信息缩略栏。如果每次鼠标悬停在个人头像上都要请求一次数据,对服务器的压力很大。所以此时可以使用v-show设置为隐藏。

    而对于信息较为敏感需要安全保密的数据,就可以使用v-if。比如同一个系统的不同种类用户之间的可见信息,管理员和普通用户的可见信息肯定不一样。这时候就可以用v-if。

    

另外则是,隐藏元素会一定程度的影响页面布局,该移除时移除,不要过多影响页面布局。


v-else和v-else-if

    用来配合v-if进行判断,跟编程语言中的if...else...一致。所以不多讲,给实例演示:

v-on

    在普通的html+js中,处理交互我们需要 监听事件 + 编写处理逻辑,同时还要及时加载数据变动,而且需要分开编写代码,过程较为繁琐。在vue里则简化很多,因为响应式已经被封装好了,而监听事件 + 编写处理逻辑我们可以使用 v-on指令。

    v-on的语法:

v-on:事件名 = "内联语句"  (你可以理解为就是一段代码)

v-on:事件名 = "methods中的函数名"

v-on也可以简写成 @,也就是 @事件名 = ""

v-on:事件名 = "内联语句"

    内联语句能做的事情有限。我们演示一下最基础的内容:

<body>

<div id="app" class="container">
    <div class="box">
        <button v-on:click="num++">+1</button>
    </div>
    <div class="box"> {{num}} </div>
    <div class="box">
        <button v-on:click="num--">-1</button>
    </div>
</div>

<script src="your vue's libPath"></script>

<script>
    const app = new Vue({
        el: '#app',
        data: {
            num:114514
        }
    })
</script>

</body>

    最终效果如下,你可以通过点击+或者-来使得中间的数字加或减。v-on监听该元素上的事件,然后触发时执行内联语句,使得 num 属性的值增加或减少,而num又被vue动态地渲染到页面中

 v-on:事件名 = "methods中的函数名"

   首先要再讲到methods,创建vue实例有三个参数,其中methods中就用来存储方法:

     我们直接上示例:

<body>

<div id="app" class="container">
    <div class="box">
        <button @click="forshow()">==</button>
    </div>
    <div v-show="flag" class="box"> Hello vue! </div>
</div>

<script src="lib/vue.js"></script>

<script>

    const app = new Vue({
        el: '#app',
        data: {
            flag:true
        },
        methods: {
            //提供方法
            forshow(){
                if(app.flag){
                    this.flag = false;
                }else {
                    this.flag = true;
                }
            }
        }
    })

</script>

</body>

    在methods中,可以使用this来指向当前vue实例。

v-bind

    v-bind用来动态地设置html的属性,例如src等。

    语法和v-on类似:

v-bind:属性名 = ""

其中v-bind可以不写,只写 : ,也就是下面的img标签可以改为<img :src="imgSrc"/>

v-for   

    主要作用是基于数据循环来多次渲染数据。渲染的数据可以是数组、对象等,这里以数组为例。

    基本语法:

v-for = "(item,index) in 数组名"

item:每一项

index:下标 (可省略)

    这里要注意,item和index是作为一个可调用参数,给我们的标签使用的,而不是我们要传的参数。我们需要去写的只有数组名。

    参数只有item是必要的,指向当前遍历到的元素。v-for本质上并不是编程语言里面的for循环,而是迭代遍历。所以在我们不需要使用到index的时候,index可以省略

     v-for默认会尝试修改原本的元素,而不是将其删除。

     什么意思呢?比如说有一个list有5个元素,如果不使用key,你删除了下标为3的数据后,下标为3的元素不会删除,而下标为4的元素的数据会前进到下标为3的元素中,最后下标为5的元素会被删除。

    如果想要让我们的一些操作正确的指向当前元素,我们还需要使用到key,用来给当前元素起别名,让我们的事务正确指向它。

<body>

<div id="app" class="container">

        <ul>
            <li v-for="(item, index) in list" :key="item.name">
                <h1> 第{{index + 1}}位学生: {{item}}</h1>
                <button @click="del(item.name)">删除</button>
            </li>
        </ul>

</div>

<script src="lib/vue.js"></script>

<script>

    const app = new Vue({
        el: '#app',
        data: {
            list:[
                {name:"张三"},
                {name:"李四"},
                {name:"王五"},
                {name:"赵六"}
            ]
        },
        methods: {
            del(name){
                this.list = this.list.filter(item => item.name !== name);
            }
        }
    })

</script>

</body>

v-model

    v-model主要用于表单数据中,讲输入栏的数据与data中的数据绑定,实现数据双向。也就是你在输入栏中输入数据,会实时更新data中绑定的数据,而你在后台中改变了data中的数据,相应的输入栏中的数据也会改变。

<body>

<div id="app" class="container">
    账户:<input type="text" v-model="name"><br>
</div>

<script src="lib/vue.js"></script>

<script>

    const app = new Vue({
        el: '#app',
        data: {
            name:''
        }
    })

</script>

</body>


网站公告

今日签到

点亮在社区的每一天
去签到