Vue的学习(二)

news2024/10/2 6:30:32

目录

一、class及style的绑定

1.v-bind:class绑定类名 绑定class为对象

​编辑2. v-bind:class绑定类名 绑定class为对象

3.v-bind:class绑定类名 绑定class为数组 

1) v-bind:class绑定类名 绑定class为数组  方法一:

2) v-bind:class绑定类名 绑定class为数组  方法二: 

4.v-bind:class绑定类名 绑定style为对象 

5.v-bind:class绑定类名 绑定style为数组

二、数据的单向绑定

1.介绍 

2.单向绑定v-bind

3.双向绑定v-model

三、事件修饰符 

1.   .stop 阻止冒泡(event.stopPropagation())

2.   .prevent阻止默认事件 

3.    .captrue 捕获 

4.  .self只触发自身

5..once只触发一次

四、结束语


一、class及style的绑定

1.v-bind:class绑定类名 绑定class为对象

代码展示

这里我们定义了一个active的类名,一个bgColor的类名,并为其添加样式,使用v-bind绑定,在vue实例中让其为true,那么我们就可以看到我们写的样式添加到了div盒子上。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

        .active {
            color: aqua
        }

        .bgColor {
            background-color: red;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="box" v-bind:class="{active:a,bgColor:b}">
            <div>1 v-bind:class绑定类名 绑定class为对象</div>
        </div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                a: true,
                b: true,
               
            }
        })
    </script>
</body>

</html>

运行结果如下

如果让其为false那么样式就不会再添加到div盒子上了。

2. v-bind:class绑定类名 绑定class为对象

在这个案例中我们绑定一个class为对象,在vue实例中使用,这里我们让active为false让bgColor为true,那么大家可以想一下结果是什么样的。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

        .active {
            color: aqua
        }

        .bgColor {
            background-color: red;
        }
    </style>
</head>

<body>
    <d
        <div class="box" v-bind:class="objCls">
            <div>2 v-bind:class绑定类名 绑定class为对象</div>
        </div>
        
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
               
                objCls: {
                    active: false,
                    bgColor: true
                },
              
            }
        })
    </script>
</body>

</html>

运行结果:我们可以看到只有背景颜色添加上了,但是文字颜色没有添加上,是因为我们让active为false

3.v-bind:class绑定类名 绑定class为数组 

1) v-bind:class绑定类名 绑定class为数组  方法一:

第一种方法是将数组中的数据写在data()中

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

        .active {
            color: aqua
        }

        .bgColor {
            background-color: red;
        }
    </style>
</head>

<body>
    <di
        <div class="box" v-bind:class="[classA,classB]">
            <div>3 v-bind:class绑定类名 绑定class为数组</div>
        </div>
       
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
              
                classA: "active",
                classB: "bgColor",
               
            }
        })
    </script>
</body>

</html>

运行结果

2) v-bind:class绑定类名 绑定class为数组  方法二: 

第二种子写法是直接将数组写在data()中,运行结果也是一样的。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

        .active {
            color: aqua
        }

        .bgColor {
            background-color: red;
        }
    </style>
</head>

<body>
    <div id="app">
       
        <div class="box" v-bind:class="[classA,classB]">
            <div>4 v-bind:class绑定类名 绑定class为数组 {{[ classArr ]}}</div>
        </div>
       
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data(){
                classArr: ["active", "bgClor"],
                
            }
        })
    </script>
</body>

</html>

运行结果

4.v-bind:class绑定类名 绑定style为对象 

如下代码块,我们一种可以给css属性(代码中是color和fontsize)一个名字然后在data() 数据中使用,或者在div中直接写backgroundColor:'gray'。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

       
    </style>
</head>

<body>
    <div id="app">
        
        <div class="box" v-bind:style="{color:activeColor,fontSize:ftSize,backgroundColor:'gray' }">
            <div>5 v-bind:class绑定类名 绑定style为对象</div>
        </div>
     
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
               
                activeColor: "red",
                ftSize: "22px",
                
            }
        })
    </script>
</body>

</html>

运行结果如下

5.v-bind:class绑定类名 绑定style为数组

 同样的我们还可以绑定style为数组,在data()中将数据添加进去

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid green;
        }

       
    </style>
</head>

<body>
    <div id="app">
      
      <div class="box" v-bind:style="[styleA,styleB]">
            <div>6 v-bind:class绑定类名 绑定style为数组</div>
        </div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                
                styleA: {
                  color: "red",
                  backgroundColor: "green"
                },
                styleB: {
                   fontsize: '22px'
             }
            }
        })
    </script>
</body>

</html>

运行结果

二、数据的单向绑定

1.介绍 

 数据发生变化会影响到视图 而v-bind绑定的数据视图变化 而数据不受影响 这就是单向的数据

 v-model 双向数据绑定 数据改变则视图发生变化 视图改变 则数据响应发生变化

代码展示

2.单向绑定v-bind

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
</head>

<body>
    <div id="app">
        
        <input type="text" :value="msg">
    
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                msg: 'hello Vue!!!'
            }
        })
    </script>
</body>

</html>

运行结果

在这个input框中我们添加上11111但是在vue中并没有发生数据的改变

3.双向绑定v-model

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" v-model="msg">
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                msg: 'hello Vue!!!'
            }
        })
    </script>
</body>

</html>

 运行结果

在这里我们可以清楚的看到数据会跟随着input的内容发生了变化,这就是单向绑定与双向绑定的不同之处。

三、事件修饰符 

1.   .stop 阻止冒泡(event.stopPropagation())

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }

        .div {
            border: 1px solid red;
            margin-top: 10px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="box">
            <div>1 .stop 阻止冒泡(event.stopPropagation())</div>
            <div class="div" @click="fn">
                <button @click="fn1">点我1</button>
                <button @click.stop="fn2">点我2</button>
            </div>
        </div>
        
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {},
            methods: {
                fn() {
                    console.log("我是外层div")
                },
                fn1() {
                    console.log("我是内部的button按钮1")
                },
                fn2() {
                    console.log("我是内部的button按钮2")
                },
               
            }
        })
    </script>
</body>

</html>

运行结果

当我们点击外部div时触发fn()事件在控制台显示,fn()函数中打印的内容,当我们点击点我1在控制台打印时,事件会进行冒泡打印出fn()以及fn1()的内容,但是我们为点我2按钮添加了stop事件修饰符,我们可以看到只打印了fn3()中的内容,防止事件进行了冒泡。

2.   .prevent阻止默认事件 

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }

        .div {
            border: 1px solid red;
            margin-top: 10px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="app">
     
        <div class="box">
            <div>2 .prevent阻止默认事件</div>
            <div class="div" @click="fn">
                <a href="https://www.baidu.com" @click="fn3">百度一下1</a>
                <a href="https://www.baidu.com" @click.prevent="fn3">百度一下2</a>
                <a href="https://www.baidu.com" @click.prevent.stop="fn3">百度一下3</a>
            </div>
        </div>

    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {},
            methods: {
                fn() {
                    console.log("我是外层div")
                },
                fn1() {
                    console.log("我是内部的button按钮1")
                },
                fn2() {
                    console.log("我是内部的button按钮2")
                },
                fn3() {
                    console.log("百度一下")
                }
            }
        })
    </script>
</body>

</html>

运行结果

  • 点击外部的div盒子只触发了fn()事件并且打印到控制台
  • 点击第一个百度一下会直接跳转到百度网页
  • 点击第二个百度一下并不会跳转直接打印到了控制台,但是事件同时进行了冒泡打印出fn()事件中的内容
  • 点击第三个被百度一下我们添加了 .prevent阻止默认事件以及stop修饰符,这时候就没有进行跳转并且阻止了冒泡。

3.    .captrue 捕获 

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }

        .div {
            border: 1px solid red;
            margin-top: 10px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="app">
        
        <div class="box">
            <div>3 .captrue 捕获</div>
            <div class="div" @click="fn">
                <button @click="fn1">点我1</button>
            </div>
            <div class="div" @click.capture="fn">
                <button @click="fn2">点我2</button>
            </div>
        </div>
      
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {},
            methods: {
                fn() {
                    console.log("我是外层div")
                },
                fn1() {
                    console.log("我是内部的button按钮1")
                },
                fn2() {
                    console.log("我是内部的button按钮2")
                },
                fn3() {
                    console.log("百度一下")
                }
            }
        })
    </script>
</body>

</html>

运行结果

当我们点击外部div时,还是一样触发fn()事件,当我们点击点我1时事件发生冒泡,如果我们添加上  .captrue事件那么就会从外向内触发,就是捕获。

4.  .self只触发自身

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }

        .div {
            border: 1px solid red;
            margin-top: 10px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="app">
      
        <div class="box">
            <div>4 .self只触发自身</div>
            <div class="div" @click.self="fn">
                <button @click="fn1">点我</button>
            </div>
        </div>
       
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {},
            methods: {
                fn() {
                    console.log("我是外层div")
                },
                fn1() {
                    console.log("我是内部的button按钮1")
                },
                fn2() {
                    console.log("我是内部的button按钮2")
                },
                fn3() {
                    console.log("百度一下")
                }
            }
        })
    </script>
</body>

</html>

 运行结果

点击外部div还是一样只触发外部,当我们添加上self修饰符那么事件就只会触发自身不会进行冒泡

5..once只触发一次

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }

        .div {
            border: 1px solid red;
            margin-top: 10px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="app">
      
        <div class="box">
            <div>5 .once只触发一次</div>
            <button @click.once="fn1">点我</button>
        </div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {},
            methods: {
                fn() {
                    console.log("我是外层div")
                },
                fn1() {
                    console.log("我是内部的button按钮1")
                },
                fn2() {
                    console.log("我是内部的button按钮2")
                },
                fn3() {
                    console.log("百度一下")
                }
            }
        })
    </script>
</body>

</html>

 运行结果

这里可以点击多次,但只触发了一次,这里没有办法进行展示,大家可以自行尝试一下。

四、结束语

那么这一节的内容到这里就结束了,大家一定要多次进行尝试, 在写js时一定要多打开控制台查看一下。这一节主要学习了,数据的绑定以及事件修饰符,期待下一次与各位宝子再次进行交流,我们下一节再见哦~。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验4-2-1 求e的近似值

//实验4-2-1 求e的近似值 /* 自然常数 e 可以用级数 11/1!1/2!⋯1/n!⋯ 来近似计算。 本题要求对给定的非负整数 n&#xff0c;求该级数的前 n1 项和。 输入格式:输入第一行中给出非负整数 n&#xff08;≤1000&#xff09;。 输出格式:在一行中输出部分和的值&#xff0c;保留…

nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)

今天 准备访问下Nginx服务&#xff0c;但是 启动时出现如下报错&#xff1a;&#xff08;80端口被占用&#xff0c;没有找到nginx.pid文件&#xff09; 解决思路&#xff1a; 1、 查看下排查下nginx服务 #确认下nginx状态 ps -ef|grep nginx systemctl status nginx#查看端口…

数据结构——时间和空间复杂度

目录 一、时间复杂度和空间复杂度是什么 二、为什么要有时间复杂度和空间复杂度 三、时间复杂度 四、空间复杂度 一、时间复杂度和空间复杂度是什么 在生活中&#xff0c;我们做一件事情需要花费一定的时间和一定的空间&#xff0c;举一个例子&#xff1a; 一个工厂需要制…

从根儿上学习spring 十一 之run方法启动第四段(5)

图15-AbstractAutowireCapableBeanFactory#doCreateBean方法 我们接着讲doCreateBean方法&#xff0c;之前对循环依赖做了些解释&#xff0c;我们接着往下看populateBean(beanName, mbd, instanceWrapper)方法 图15-572行 这行就是调用populateBean(beanName, mbd, instanceW…

目标检测——YOLOv10: Real-Time End-to-End Object Detection

YOLOv10是在YOLOv8的基础上&#xff0c;借鉴了RT-DETR的一些创新点改进出来的 标题&#xff1a;YOLOv10: Real-Time End-to-End Object Detection论文&#xff1a;https://arxiv.org/pdf/2405.14458源码&#xff1a;https://github.com/THU-MIG/yolov10 1. 论文介绍 在过去的几…

【C语言】详解feof函数和ferror函数

文章目录 前言1. feof1.1 feof函数原型1.2 正确利用函数特性读写文件1.2.1 针对文本文件1.2.2 针对二进制文件 1.3 feof函数的原理1.4 feof函数实例演示 2. ferror2.1 ferror函数原型 前言 或许我们曾在网络上看过有关于feof函数&#xff0c;都说这个函数是检查文件是否已经读…

Windows系统使用内网穿透配置Mysql公网地址实现IDEA远程连接

文章目录 前言1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql5. 固定连接公网地址6. 固定地址连接测试 前言 IDEA作为Java开发最主力的工具&#xff0c;在开发过程中需要经常用到数据库&#xff0c;如Mysql数据库&#xff0c;但是在IDEA中只能…

【Python学习手册(第四版)】学习笔记15-文档(注释、PyDoc等)

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍程序的文档概念。包括为程序编写的注释&#xff0c;以及内置工具的文档。讲解文档字符串、Python的在线手册等资源、以及PyDoc的help函数和网页接口。…

蒙电通无人机航线规划系统 雷达点云电力应用软件

蒙电通无人机航线规划系统&#xff0c;它可进行标记杆塔、切档、自动对点云数据分类和点云抽稀等处理&#xff0c;按3张或6张照片自动生成航线&#xff0c;或按自定义航线模型生成航线&#xff0c;支持安全性检测。在满足当地巡检标准的前提下&#xff0c;系统操作非常简便。 …

llama神经网络的结构,llama-3-8b.layers=32 llama-3-70b.layers=80; 2000汉字举例说明

目录 llama-3-8b.layers=32 llama-3-70b.layers=80 llama神经网络的结构 Llama神经网络结构示例 示例中的输入输出大小 实际举例说明2000个汉字文本数据集 初始化词嵌入矩阵 1. 输入层 2. 嵌入层 3. 卷积层 4. 全连接层 llama-3-8b.layers=32 llama-3-70b.laye…

跑深度学习模型Ⅲ:正确安装与torch版本对应的其他torch包

pytorch的正确安装可以回看我前面的博客跑深度学习模型Ⅱ&#xff1a;一文安装正确pytorch及dgl-CSDN博客 这篇博客将安装torch_grometric&#xff0c;torch_scatter, torch_sparse, torch_cluster库 1. 查看自己的torch版本 进入cmd 切换到要用的python环境中&#xff0c;输…

ADB Installer 0 file(s)copied

在为泡面神器刷安卓&#xff0c;做准备工作装ADB时报错了&#xff0c;以下是报错提示 再用cmd命令adb version验证下&#xff0c;提示adb不是有效命令&#xff0c;百分百安装失败了&#xff0c;往上各种搜索查询均没有对症的&#xff0c;其中也尝试了安装更新版本的&#xff0c…

2024版本IDEA创建Servlet模板

IDEA 版本 2024.1.4 新版本的 IDEA 需要自己创建 Servlet 模板 旧版本 IDEA 看我这篇文章&#xff1a;解决IDEA的Web项目右键无法创建Servlet问题_2024idea无法创建servlet项目-CSDN博客文章浏览阅读216次&#xff0c;点赞7次&#xff0c;收藏3次。解决IDEA的Web项目右键无法创…

AGI思考探究的意义、价值与乐趣 Ⅴ

搞清楚模型对知识或模式的学习与迁移对于泛化意味什么&#xff0c;或者说两者间的本质&#xff1f;相信大家对泛化性作为大语言模型LLM的突出能力已经非常了解了 - 这也是当前LLM体现出令人惊叹的通用与涌现能力的基础前提&#xff0c;这里不再过多赘述&#xff0c;但仍希望大家…

【Python学习手册(第四版)】学习笔记14-迭代器和列表解析(一)

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要以通俗易懂的语言介绍迭代器&#xff08;文件迭代、手动迭代iter和next等&#xff09;&#xff0c;列表解析式包括基础知识包括写法、文件上使用列表解析…

繁简之争:为什么手机芯片都是 ARM

RISC 和 CISC 指令集 之前的文章《揭秘 CPU 是如何执行计算机指令的》中说到&#xff0c;如果从软件的角度来讲&#xff0c;CPU 就是一个执行各种计算机指令&#xff08;Instruction Code&#xff09;的逻辑机器。 计算机指令集是计算机指令的集合&#xff0c;包括各种类型的…

Redis进阶(四):哨兵

为了解决主节点故障&#xff0c;需要人工操作切换主从的情况&#xff1b;因此需要一种方法可以自动化的切换&#xff1a;哨兵的引入大大改变这种情况。 哨兵的基本概念 自动切换主从节点 哨兵架构 1、当一个哨兵节点发现主节点挂了的时候&#xff0c;还需要其他节点也去检测一…

Cyber Weekly #18

赛博新闻 1、Google 狂卷小模型&#xff0c;2B 参数 Gemma 2 赶超 GPT-3.5 Google本周发布了开源的轻量级、高性能模型 Gemma 2 2B。它拥有 20 亿参数&#xff0c;是从更大规模的模型中提炼而来的&#xff0c;在 LMSYS 大模型竞技场的得分超越了 GPT-3.5 和 Mixtral 8x7B。该…

【12.PIE-Engine案例——加载Landsat 7 SR单景影像】

原始路径 欢迎大家登录航天宏图官网查看本案例原始来源 最后结果 具体代码 /*** File : Landsat7SRImage* Time : 2020/7/21* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : (C)Copyright 航天宏图信息技术股份有限公司* Desc …

429总线协议

传输方式 单向方式&#xff1a;信息只能从通信设备的发送口输出&#xff0c;经传输总线传至与它相连的需要该信息的其他设备的接口。在两个通信设备间需要双向传输时&#xff0c;则每个方向上各用一个独立的传输总线。 编码方式 信号从高电平回归零电平表示逻辑状态1&#x…