2、事件修饰符、双向绑定、style样式使用、v-for循环遍历、v-if 和 v-show

一、事件修饰符

1、.stop 阻止冒泡事件

  • 给谁加了阻止冒泡事件,谁下面的盒子就不会执行了
<div id="app">
    <div class="parent" @click="log3">
        <div class="child" @click="log2">
            <button @click.stop="log1">我是按钮</button> // 输出1111
        </div>
    </div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            log1() { console.log(11111111111); },
            log2() { console.log(222222222222); },
            log3() { console.log(3333333333); }
        },
    })
</script>

2、.capture 添加事件捕获

  • 给谁加捕获事件,谁先触发
<div id="app">
    <div class="parent" @click="log3">
        <div class="child" @click.capture="log2"> //先输出22222 然后 1111 33333
            <button @click="log1">我是按钮</button> 
        </div>
    </div>
    </div>

3 、.self 点击他的时候触发

  • 只有在点击的时候才可以触发
<div id="app">
    <div class="parent" @click="log3">
    //点击2  触发222 333
        <div class="child" @click.self="log2">
            <button @click="log1">我是按钮</button>
            //点击1 触发 111 333
        </div>
    </div>
</div>

4、.once只触发一次

<div id="app">
    <div id="one" @click="one">
    <!-- 给two盒子的点击事件添加.once修饰符 -->
        <div id="two" @click.once="two">
            <div id="three" @click="three"></div>
        </div>
    </div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            one() { console.log('单击one盒子了'); },
            two() { console.log('单击two盒子了'); },
            three() { console.log('单击three盒子了'); }
        }
    })
</script>

5、.prevent 阻止默认事件

<div id="app">
    <!-- 给链接标签的点击事件添加.prevent修饰符 -->
    <a href="#" @click.prevent="tap">点击链接</a>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            tap() {
                console.log('阻止默认事件');
            }
        }
    })
</script>

二、v-model 数据双向绑定(表单控件)

  • 原理:通过数据劫持结合订阅模式的方式来实现的,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。
  • 指令 v-model
<div id="app">
    <input type="text" v-model:value=first> + <input type="text" v-model:value=second> <button @click="add">=</button> <input type="text" v-model:value=result>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            first: '',
            second: '',
            result: ''
        },
        methods: {
            add() {
                // 获取到的input框的value值都是字符串类型
                this.result = Number(this.first) + Number(this.second)
            }
        }
    })
</script>

image-20240322183107537

三、样式的使用

    <style>
        .red { color: red; }
        .fs30 { font-size: 30px; }
    </style>

1、class(4钟)

数组

<body>
    <div id="app">
        <div :class="[class1,class2]">字体30px、红色字</div>
        <!-- 等价于 -->
        <div class="red fs30">字体30px、红色字</div>
    </div>
</body>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            class1: 'red',
            class2: 'fs30'
        },
        methods: {}
    })
</script>

三目表达式

<div id="app">
<!-- age=10 满足age<18 所以class=class1 -->
    <div :class="age<18?class1:class2">未成年人</div>
<!-- 等价于 -->
    <div :class="age<18?'red':'fs30'">未成年人</div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            age: 10,
            class1: 'red',
            class2: 'fs30'
        },
        methods: {}
    })
</script>

对象

<div id="app">
    <div :class="{red:true}">显示红色字体</div>
    <div :class="{'red':true}">显示红色字体</div>
    <div :class="{'red':flag}">显示红色字体</div>
    <div :class="{'red':'flag'}">显示红色字体</div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            flag: true
        },
        methods: {}
    })
</script>

数组内置对象

<div id="app">
    <div :class="[{red:true},{fs30:flag}]">红色字体、字号30px</div>
    <div :class="[{'red':flag},{fs30:'flag'}]">红色字体、字号30px</div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            flag: true
        },
        methods: {}
    })
</script>

2、style(3钟)

对象

    <div id="app">
        <div :style=style1>红色字体</div>
        <div :style=style2>字号30px、字体加粗</div>
    </div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            style1: 'color:red',
            style2: {
                fontSize: "30px",
                "font-weight": 700
            }
        },
        methods: {}
    })
</script>

数组内置对象

    <div id="app">
        <div :style='[style1,style2]'>红色字体、字号30px、字体加粗</div>
    </div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            style1: {
                'color': 'red'
            },
            style2: {
                fontSize: "30px",
                "font-weight": 700
            }
        },
        methods: {}
    })
</script>

函数返回值

<body>
    <div id="app">
        <div :style='getStyle()'>字号30px、字体红色</div>
    </div>
</body>
<script>
    let vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            getStyle() {
                return {
                    color: 'red',
                    fontSize: "30px",
                }
            }
        }
    })
</script>

3、v-for

遍历数组

<body>
    <div id="app">
        <!-- item:数组的每一项   index:数组的索引(索引从0开始) -->
        <div v-for="(item,index) in list" :key="item">{{item}}</div>
    </div>
</body>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            list: [ 1, 2, 3, 4 ]
        },
        methods: {}
    })
</script>

遍历对象

<body>
    <div id="app">
        <!-- value:值   key:键   index:索引 -->
        <div v-for="(value,key,index) in obj" :key="value">{{value}}</div>
    </div>
</body>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            obj: {
                name1: '小明',
                name2: '小红',
                name3: '小花',
                name4: '小亮',
            }
        },
        methods: {}
    })
</script>

遍历数字

<div v-for="num in 10">{{num}}</div>

  • key
    • 必须是唯一值
    • 必须是数字或者字符串
    • 作用:提高重排效率,就地复用

4、v-if 和 v-show

  • 相同点:都可以进行元素的隐藏
  • 不同点:
    • v-if:通过删除DOM元素进行隐藏,v-show通过display:none;进行隐藏
  • 应用场景:
    • v-show:用于少次的切换,v-show应用于频繁的切换
<div id="app">
    <div v-if="isShow">v-if,变量为布尔值,为true才渲染Dom</div>
    <div v-show="isShow">v-show,变量为布尔值,为true才渲染Dom</div>
    <div v-if="false">v-if通过删除dom元素来实现</div>
    <div v-show="false">v-show是设置display:none来实现</div>
  <!-- v-if可以和v-else-if、v-else 一起结合使用,但是中间不能加dom内容 -->
	<!--   age=35,满足age<30 显示青年     -->
    <div v-if="age<18"> 少年</div>
    <div v-else-if="age<30"> 青年</div>
    <div v-else-if="age<60"> 中年</div>
    <div v-else> 老年</div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            isShow: true,
            age: 35
        },
        methods: {}
    })
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

厨师上门服务小程序开发与运营指南

随着移动互联网的普及&#xff0c;各种生活服务类APP应运而生。厨师上门服务小程序作为一种新型的服务模式&#xff0c;为用户提供了便捷、个性化的餐饮服务。本文将为您介绍厨师上门服务小程序的开发与运营方法&#xff0c;帮助您快速搭建起一款实用的小程序。 一、小程序开发…

MyEclipse打开文件跳转到notepad打开问题

问题描述 windows系统打开README.md文件&#xff0c;每次都需要右键选择notepad打开&#xff0c;感觉很麻烦&#xff0c;然后就把README.md文件打开方式默认选择了notepad&#xff0c;这样每次双击就能打开&#xff0c;感觉很方便。 然后某天使用MyEclipse时&#xff0c;双击RE…

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…

网络:DHCP 协议简介

文章目录 1. 前言2. DHCP 协议简介2.1 DHCP 客户端广播 DHCPDISCOVER 消息2.2 DHCP 服务器回复 DHCPOFFER 消息2.3 DHCP 客户端广播 DHCPREQUEST 消息2.4 DHCP 服务器回复 DHCPACK 消息2.5 剩余的工作 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&…

h5增强表单---数据列表和属性

h5增强表单---数据列表 下拉列表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

Echarts功能记录

基础配置 工具箱toolbox 对应功能 案例中使用到的第三方脚本

力扣450 删除二叉搜索树中的节点 Java版本

文章目录 题目描述思路代码 题目描述 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除…

学生如何帮老师撰写审稿意见

开头先介绍这篇文章做了什么&#xff0c;达到了什么样的目的、有什么创新点、应用&#xff0c;然后第一段最后一句写上&#xff0c;如果你进行了如下补充&#xff0c;明确表达了相关内容等&#xff0c;就能够接收你的文章&#xff08;在我们暂时不想接收他的文章的情况下&#…

JetPack之ViewModel

目录 一、简介1.1 优点1.2 生命周期 二、使用2.1 ViewModel保证数据稳定性demo2.2 ViewModel中如何传递上下文Context 三、注意点 一、简介 ViewModel 组件用于管理界面相关的数据&#xff0c;并且在配置更改&#xff08;如屏幕旋转&#xff09;时保持数据的一致性。ViewModel…

不可变集合及Stream流

若希望某个数据是不可修改的&#xff0c;就可以考虑使用不可变集合&#xff0c;以提高安全性&#xff1b;&#xff08;JKD9之后才有&#xff09; List不可变集合&#xff1a; public static void main(String[] args) {/*创建不可变的List集合"张三", "李四&q…

快速修复找不到msvcp140.dll,无法继续执行此代码问题

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“无法找到msvcp140.dll”的错误。那么&#xff0c;msvcp140.dll究竟是什么呢&#xff1f;它为什么会出现这样的错误呢&#xff1f;通过查阅资料和自己的实践经验&#xff0c;我对msvcp140.dll…

odoo 官方常用 widgets 小部件清单

在Odoo中&#xff0c;小部件&#xff08;Widgets&#xff09;是用于构建用户界面的组件&#xff0c;它们决定了表单、列表视图以及更多交互元素的显示和行为方式。虽然无法提供Odoo14及之后所有版本的确切小部件清单&#xff0c;但可以列举一些常见和重要的内置小部件类型&…

11.创建后台系统项目

后台系统项目 兼容性 vite官网&#xff1a;https://vitejs.dev/ vite中文网&#xff1a;https://cn.vitejs.dev/ vite需要node.js版本 >14.0.0&#xff0c;建议16 node -v 查看版本号 创建项目 进入存放目录 执行命令 npm create vitelatest 选择vue框架 选择typescript…

V R元宇宙平台的未来方向|V R主题馆加 盟|游戏体验馆

未来&#xff0c;VR元宇宙平台可能会呈现出以下发展趋势和可能性&#xff1a; 全面融合现实与虚拟世界&#xff1a; VR元宇宙平台将更加无缝地融合现实世界和虚拟世界&#xff0c;用户可以在虚拟环境中进行各种活动&#xff0c;与现实世界进行互动&#xff0c;并且体验到更加逼…

【PostGresql】------ pg多表数据多个条件汇总 使用 union 方法示例代码

1. 示例代码如下&#xff1a; SELECT"ID","DT_DATE","CNAME","RMAN_NAME","DEP_NAME","DEP_ID","INVEST_MAN_NAME","TYPE_NAME","INVEST_LEVEL_NAME","POSITION_NAME",…

详细教程与使用指南助您轻松上手Sora

在2024年2月16日&#xff0c;OpenAI团队宣布了一项革命性的技术突破——推出了首个能够将文本描述转化为视频内容的人工智能模型&#xff0c;名为Sora。这一创新标志着人工智能在多媒体内容创作领域迈出了重要一步。Sora模型不仅能够根据用户的文字描述生成长达60秒的动态视频&…

复习Day3

1231. 航班时间 - AcWing题库 #include<bits/stdc.h> using namespace std; int getTime(){//得到时间 int h1,m1,s1,h2,m2,s2,d0;scanf("%d:%d:%d %d:%d:%d (%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);//补匹配直接跳过 int timed*24*3…

leetcode 1047. 删除字符串中的所有相邻重复项

题目 思路 这是一道easy题&#xff0c;很明显要用栈。 有三种情况&#xff1a; 如果栈空&#xff0c;则直接入栈。 如果栈顶元素和当前元素不同则入栈。 如果栈顶元素和当前元素相同则栈顶元素出栈 最后再将栈中的元素依次pop&#xff0c;添加到一个字符串中就行。 代码…

Java设计模式 | 抽象工厂模式

抽象工厂模式 工厂方法模式中考虑的是一类产品的生产&#xff0c;如幼儿园只培养小朋友&#xff0c;鞋厂只生产鞋子。这些工厂只生产同种类产品&#xff0c;同种类产品称为同等级产品&#xff0c;即工厂方法模式只考虑生产同等级的产品&#xff0c;但是在现实生活中许多工厂都…

一文搞懂数据链路层

数据链路层 1. 简介2. MAC3. 以太网 1. 简介 &#xff08;1&#xff09;概念 链路(link)是一条无源的点到点的物理线路段&#xff0c;中间没有任何其他的交换结点。 数据链路(data link) 除了物理线路&#xff08;双绞线电缆、同轴电缆、光线等介质&#xff09;外&#xff0…