谷粒商城实战笔记-39-前端基础-Vue-指令-v-on、v-for、v-if


本节主要介绍了几个指令的使用:

  • v-on
  • v-for
  • v-if

一,v-on

1,指令简介

v-on 是 Vue.js 中的一个指令,用于在 DOM 元素上监听用户事件,并在事件触发时执行相应的 JavaScript 函数。它提供了一种将 Vue 实例中的方法与 DOM 事件关联起来的方式,使得你可以轻松地对用户交互做出响应。

v-on 指令的基本语法是在元素上添加 v-on:event-name=“method”,其中 event-name 是你要监听的 DOM 事件类型(如 click、mouseover、keydown 等),method 则是 Vue 实例中定义的方法名。

2,在button按钮中添加v-on:click

在index.html中增加一个button按钮。

<button v-on:click="num++" >点赞</button>

注意,这个按钮使用了v-on:click指令,指令中是js代码,当按钮被点击后,执行这段代码,model中的num自增。

在这里插入图片描述
当然,在v-on中也可以调用model中的方法。

<button v-on:click="cancel" >取消点赞</button>

如上,在一个button中使用v-on:click指令注册了click事件,这个事件调用了cancel方法,其在vue对象中的声明如下。

let vm = new Vue({
        el: '#app',
        data: {
          name: "张二强",
          num: 100
        },
        methods:{
            cancel(){
                this.num--;
            }
        }
      })

注意,方法都要声明在methods下。

在这里插入图片描述
事件绑定可以简写,例如v-on:click='add'可以简写为@click='add',后面的示例都采用简写。

3,事件修饰符

在事件处理程序中调用 event.preventDefault()event.stopPropagation() 是非常常见的需求。

尽管可以在方法中轻松实现这点,但最佳实践是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。

  • .stop :阻止事件冒泡到父元素
  • .prevent:阻止默认事件发生
  • .capture:使用事件捕获模式
  • .self:只有元素自身触发事件才执行。(冒泡或捕获的都不执行)
  • .once:只执行一次

定义如下View演示事件修饰符的使用。

<div id="app">
    <!-- 事件修饰符 -->
    <div style="border: 1px solid red;padding: 20px;" @click="hello">
     大div
	    <div style="border: 1px solid blue;padding: 20px;" @click="hello">
	        小div <br />
	    </div>
    </div>
</div>
let vm = new Vue({
     el: '#app',
     methods:{
          hello(){
              alert("点击了")
          }
     }
})

效果如下,一个div内嵌套着另一个div,两个div注册了点击事件。
在这里插入图片描述

阻止冒泡

如果点击内部div,会发现有两次Alert弹窗,原因是点击事件会冒泡到外部div,触发外部div的点击事件,可以通过事件修饰符阻止冒泡。

<div id="app">
    <!-- 事件修饰符 -->
    <div style="border: 1px solid red;padding: 20px;" @click="hello">
     大div
	    <div style="border: 1px solid blue;padding: 20px;" @click.stop="hello">
	        小div <br />
	    </div>
    </div>
</div>

内部div注册点击事件时加上修饰符stop,即可阻止冒泡。

执行一次

注册点击事件时加上修饰符once,表示只有第一次点击时执行一次函数,后续的点击事件都不执行。

阻止默认

对于a标签,点击时默认会跳转到href属性执行的网站,可以通过修饰符阻止这个默认行为。

<div id="app">
    <!-- 事件修饰符 -->
    <div style="border: 1px solid red;padding: 20px;" @click="hello">
     大div
	    <div style="border: 1px solid blue;padding: 20px;" @click.stop="hello">
	        小div <br />
	        <a href="http://www.baidu.com" @click.prevent.stop="hello">去百度</a>
	    </div>
    </div>
</div>

注意a标签的click指令后有连续两个修饰符.prevent.stop,启动的作用有两个:

  • prevent,阻止默认的跳转行为
  • stop,阻止冒泡

4,按键修饰符

在监听键盘事件时,经常需要检查常见的键值。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

<!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` -->
<input v-on:keyup.13="submit">
记住所有的 `keyCode` 比较困难,所以 Vue 为最常用的按键提供了别名:
<!-- 同上 -->
<input v-on:keyup.enter="submit">
<!-- 缩写语法 -->
<input @keyup.enter="submit">

按键别名:

.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

5,组合按钮

可以用如下修饰符来实现同时按下两个键时才有指定的响应。

.ctrl
.alt
.shift

<!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

二,v-for

遍历数据渲染页面是非常常用的需求,Vue 中通过 v-for 指令来实现。

1,遍历数组

model中定义了一个名为users的数组。

let app = new Vue({
     el: "#app",
     data: {
         users: [
                { name: '柳岩', gender: '女', age: 21 },
                { name: '张三', gender: '男', age: 18 },
                { name: '范冰冰', gender: '女', age: 24 },
                { name: '刘亦菲', gender: '女', age: 18 },
                { name: '古力娜扎', gender: '女', age: 25 }
        ]
    }
})

通过v-for遍历users数组,渲染到页面上。

	<div id="app">
        <ul>
            <li v-for="(user,index) in users" >
                <!-- 1、显示user信息:v-for="item in items" -->
               当前索引:{{index}} ==> {{user.name}}  ==>   {{user.gender}} ==>{{user.age}} <br>
            </li>
        </ul>
    </div>

语法:v-for=“(item,index) in items”

  • items:要迭代的数组
  • item:迭代得到的数组元素别名
  • index:迭代到的当前元素索引,从 0 开始。

页面渲染效果如下。

在这里插入图片描述

2,v-bind:key

在 Vue.js 中,v-for 指令用于渲染列表或集合中的元素,而 :key 属性则与 v-for 配合使用,以提高列表渲染的效率和准确性。

key 的主要作用在于帮助 Vue 的虚拟 DOM 更高效地更新和重用元素。

:key 的重要性

当 Vue 需要更新使用 v-for 渲染的列表时,它会比较新旧虚拟 DOM 的差异,然后只做必要的更新。

如果没有提供 key,Vue 会采用一种基于元素位置的策略来决定哪些元素需要被更新。

然而,这种方法在某些情况下可能会导致不准确的更新或不必要的重渲染。

提供唯一的 key 值可以给每个元素一个唯一标识,这样 Vue 在更新列表时就能精确地知道哪些元素被添加、删除或移动。这有助于避免不必要的 DOM 更新,从而提高性能。

使用 :key 的最佳实践

使用唯一值key 应该是一个在列表中独一无二的值。通常,从后端获取的 ID 或索引可以作为 key 的好选择。对于上面的例子,可以用name属性作为key

	<div id="app">
        <ul>
            <li v-for="(user,index) in users" :key="user.name">
                <!-- 1、显示user信息:v-for="item in items" -->
               当前索引:{{index}} ==> {{user.name}}  ==>   {{user.gender}} ==>{{user.age}} <br>
            </li>
        </ul>
    </div>

3,遍历对象

	<div id="app">
        <ul>
            <li v-for="(user,index) in users" :key="user.name">
                <!-- 1、显示user信息:v-for="item in items" -->
               当前索引:{{index}} ==> {{user.name}}  ==>   {{user.gender}} ==>{{user.age}} <br>
遍历对象信息:
                对象信息:<br/>
                <span v-for="(v,k,i) in user">{{index}}个对象的第{{i}}个属性:{{k}}=={{v}}<br/></span>
            </li>
        </ul>
    </div>

页面渲染效果如下。

在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 19:54:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 19:54:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 19:54:01       45 阅读
  4. Python语言-面向对象

    2024-07-20 19:54:01       55 阅读

热门阅读

  1. 一个线程进入线程池后的工作流程

    2024-07-20 19:54:01       15 阅读
  2. Redis 内部的字符串和字典

    2024-07-20 19:54:01       20 阅读
  3. cordova使用vue进行开发

    2024-07-20 19:54:01       20 阅读
  4. 千字长文讲解python闭包

    2024-07-20 19:54:01       16 阅读
  5. 网友提问:display:flex和display:box有什么区别?

    2024-07-20 19:54:01       16 阅读
  6. 每天一个数据分析题(四百三十八)- A/Btest

    2024-07-20 19:54:01       17 阅读
  7. 为了Python换源,我开发了一个库「pipco 0.0.19」

    2024-07-20 19:54:01       20 阅读
  8. Python3 第十九课 -- 迭代器与生成器

    2024-07-20 19:54:01       21 阅读
  9. SQL

    SQL

    2024-07-20 19:54:01      15 阅读
  10. python环境搭建步骤记录

    2024-07-20 19:54:01       17 阅读
  11. 【Linux常用命令】之sed命令

    2024-07-20 19:54:01       18 阅读