vue3中常用的指令之v-bind和v-on

news2024/11/27 8:28:55

一、v-bind指令

一个vue2和vue3之间的不同之处:Vue2中template模板中只能有一个根元素,但是在Vue3中允许template中有多个元素。

1.v-bind的绑定基本属性

某些属性也希望是动态绑定的,比如动态绑定a元素中的href属性。
v-bind可以绑定一个或者多个属性值,或者向另一个组件中传递props值。

<template id='my-app'>  
  <a v-bind:href="href"></a>
<!--   对应的语法糖 -->
  <a :href="href"></a>
</template>

v-bind 有一个对应的语法糖,也就是简写形式,直接写:,使得更加简洁。

2.v-bind绑定class

1)在开发过程中,有时候元素class也是动态的,比如:
当数据为某个状态时候,字体显示红色;
当数据为另一个状态的时候,字体显示为黑色。
2)绑定class有两种方式
① 对象语法

<style>
    .active{
        color:red;
    }
</style>

<body>
    <div id="app"></div>

    <template id="my-app">
        <div :class="{'active':isActive}">哈哈哈哈</div>
        <button @click="toggle">切换</button></button>
    </template>

    <script src="../js/vue.js"></script>
    <script>
        const App = {
            template:'#my-app',
            data(){
                return {
                    isActive:true,
                }
            },
            methods: {
                toggle(){
                    this.isActive=!this.isActive
                }
            },
        }

        Vue.createApp(App).mount('#app');
    </script>
</body>
  • 可以使用单个键值对,这里
    哈哈哈哈
    其实使用的是对象形式, 语法为{‘active’:boolean}.
  • 也可以使用多个键值对,语法为{‘active’: isActive, ‘title’:true}
  • 一个小细节:语法中的active这个类名可以不加引号,直接写{active:true}
  • 也可以将默认的class和动态绑定的class结合
<div class="hader" :class="{'active':isActive}">哈哈</div>
  • 可以将对象放在一个单独的属性中
<div :class="classObj">哈哈哈哈</div>

// data中
<script>
        const App = {
            template:'#my-app',
            data(){
                return {
                    isActive:true,
                    classObj:{
                        active:true,
                    }
                }
            },
            methods: {
                toggle(){
                    this.isActive=!this.isActive
                }
            },
        }

        Vue.createApp(App).mount('#app');
    </script>
  • 将返回的对象放在一个methods()方法中
<div :class="getClassObj()">哈哈哈哈</div>

② 数组语法

  • 基本的写法
 <div :class="['abc']"></div>
  • 数组语法中可以嵌套对象语法
 <!-- 数组语法中实际上是可以嵌套对象语法的 -->
  <div :class="['abc',{active:isActive}]"></div>

3.v-bind中绑定style

1)可以利用v-bind:style绑定一些CSS内联样式:
因为一些样式是需要根据数据动态决定的;
比如某段文字的颜色,字体大小等。
2)可以使用驼峰式(camelCase)或者短横线分隔(kebab-case,记得用引号括起来)来命名。
3)绑定style的两种方式
① 对象语法

<div :style="{color:'red'}">hahhah</div>
  • 上面的语句如果是动态绑定,并且意思是颜色为red红色,那么后面的red必须加上引号,不然就会认为是一个变量,或者可以用下面的形式写。
<div :style="{color:color}">hahhah</div>
data(){
    return {
      color:'red'
    }
}
  • 或者也可以用拼接的形式
<div :style="{color:color,fontSize:finalFontSize+'px'}">hahhah</div>
data(){
  return {
    color:'red',
    finalFontSize:50,
  }
}
  • 也可以直接都写成对象
<div :style="finalStyleObj">hahhah</div>
data(){
  return {
    finalStyleObj:{
      fontSize:'30px',
      fontWeight:700,
      backgroundColor:'red'
    }
  }
}
  • 可以直接放在methods中
<div :style="getFinalStyle()">hahhah</div>
methods:{
  getFinalStyle(){
    return {
      fontSize:'30px',
      fontWeight:700,
      backgroundColor:'red'
    }
  }
}

②数组语法
和绑定class是类似的。

  <div :style="[styleObj,style2Obj]">hhhh</div>
data(){
       return {
        styleObj:{
          color:'red',
        },
         style2Obj:{
           fontSize:'20px'
         }
    }
 }

4.动态绑定属性

在某些情况下,比如说自定义组件中,我们的属性名可能也是不固定的。
1)之前所学的src、href、class、style,属性名称都是固定的。
2)如果属性名称不是固定的,那么就意味着这些东西也是可以自己定义的,格式是 :[属性名]=‘值’。
3) 这种绑定的方式,就称为动态绑定属性。

<!-- 属性的名称也不是动态的 -->
<div :[name]="value">哈哈哈哈</div>
data(){
        return {
             name:'abc',
             value:'yan'
       }
  }

5.v-bind属性直接绑定一个对象

如果想要将一个对象的所有属性,绑定到元素上的所有属性,可以直接使用v-bind绑定一个对象
最终想要的结果是下面这样的,将一个对象中的所有属性都绑定为元素的所有属性。
在这里插入图片描述

<template id="my-app">
  <div v-bind="info"></div>
</template>
data(){
  return {
    info:{
      name:'qian',
      age:'18',
    }
  }
}

二、v-on指令

v-on在Vue中用来绑定事件监听。

1.v-on的基本使用

  • 缩写是@
  • 完整写法:v-on:监听的事件=“methods中的方法” ,例如 v-on:click=“toggle”,它的语法糖是@click
  • 绑定其他事件
<button @mousemove="mouseMove"></button>
  • 绑定一个对象,这个其实是因为绑定多个事件,将它们放在一个对象中
<button v-on="{click:btnClick, mousemove:mouseMove}"></button>

2.v-on参数传递

1)当通过methods中定义方法,供@click 调用的时候,如果不需要额外的参数,那么在方法的括号中可以不添加任何参数,但是在methods中的方法其实是默认接收了一个原生事件event。

<button @click="btnClick"></button>
methods: {
  btnClick(event){
    console.log(event);
  }
},
  1. 如果需要同时传入一个参数,同时需要event时候,可以通过$event传入事件。
<button @click="btnClick1($event,'why')">jjj</button>
methods: {
  btnClick1(event,message){
    console.log(event,message);
  }
},

3.v-on 的修饰符

在这里插入图片描述

4.条件渲染

在某些情况下,需要根据当前的条件决定某些元素或者组件是否渲染,这个时候需要进行条件判断。
v-if、v-else、v-else-if用于根据条件渲染某一块内容。
1)只有条件为true时,才会被渲染出来
2)这三个指令与JavaScript中的条件语句if、else、else if类似;
3)v-if的渲染原理:
v-if是惰性的;当条件为false时,其判断的内容完全不会被渲染或者被销毁掉;当条件为true时,才会真正渲染条件块中的内容。

5.v-show和v-if的区别

1)用法上:v-show不支持在template标签上使用;v-show不可以和v-else一起使用。v-show 是通过 display 来控制标签进行渲染的,但是 template 标签在 vue 解析后是不会显示在页面上的,是虚拟 Dom,所以无法使用 v-show。反之 v-if 是可以使用在 template 标签上,因为 v-if 是条件渲染,只要满足 v-if 后的条件就可以完成渲染。
2)本质上:v-show元素无论是否需要显示到浏览器上,它的DOM实际上都是有渲染的,只是通过CSS的display属性来进行切换;v-if当条件为false时,其对应的原生压根就不会被渲染到DOM中。
3)开发中如果原生需要在显示和隐藏之间频繁切换,就使用v-show;如果不会频繁发生切换,就使用v-if。

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

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

相关文章

verilog学习笔记- 14)静态数码管显示实验

目录 简介: 实验任务: 硬件设计: 程序设计: 下载验证: 简介: 数码管也称半导体数码管&#xff0c;它是将若干发光二极管按一定图形排列并封装在一起的一种数码显示器件。常见的数码管如图这种数码管主要被称为八段数码管或 8 字形数码管&#xff0c;可用来显示小数点、数…

【Linux 基础】

【Linux 基础】 一、 Linux 概述 1. Linux 介绍 UNIX 是一个强大的多用户、多任务操作系统&#xff0c;于1969年在贝尔实验室开发&#xff0c;UNIX 的商标权有国际开放组织&#xff08;The Open Group&#xff09;所拥有&#xff0c;UNIX 操作系统是商业版&#xff0c;需要收…

【OpenGL学习】Shader和Shader类的抽象

Shader 本节学习OpenGL中Shader的使用并将其抽象为类&#xff0c;简要介绍OpenGL所使用的着色器语言GLSL。 一、什么是Shader&#xff1f; 参考维基百科中对Shader的定义&#xff1a;着色器 - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 计算机图形学领域中&…

SpringBoot处理跨域总结

解决跨域的五种方法1、CorsFilter新建一个类Configuration public class CorsConfig {Beanpublic CorsFilter corsFilter() {//1. 添加 CORS配置信息CorsConfiguration config new CorsConfiguration();//放行哪些原始域//springboot版本为2.4.0以前写法config.addAllowedOrig…

kaggle竞赛 | Instant Gratification

kaggle比赛链接&#xff1a; https://www.kaggle.com/competitions/instant-gratification/data 目录普通方案优胜方案1. 用方差筛选特征2.QDA二次判别分析3.数据分组&#xff08;伪标签&#xff09;4.查看结果赛题总结普通方案 # 数据集路径 INPUT_PATH ../input/import num…

python学习笔记---进程和线程【廖雪峰】

进程和线程 现在&#xff0c;多核CPU已经非常普及了&#xff0c;但是&#xff0c;即使过去的单核CPU&#xff0c;也可以执行多任务。由于CPU执行代码都是顺序执行的&#xff0c;那么&#xff0c;单核CPU是怎么执行多任务的呢&#xff1f; 答案就是操作系统轮流让各个任务交替…

ESP-IDF:企业链表例程,实现初始化,插入,打印等功能。

例程&#xff1a; 简单地写一下企业链表&#xff0c;实现初始化&#xff0c;插入&#xff0c;打印等功能。 /企业链表/ typedef struct LINKNODE09 { // 定义节点 LINKNODE09 *next; } linknode09; // 定义表头 typedef struct LINKLIST09 { // 定义表头 linknode09 head; in…

【胖虎的逆向之路】03——Android一代壳脱壳办法罗列实操

【胖虎的逆向之路】03——Android脱壳办法罗列&脱壳原理详解 【胖虎的逆向之路】01——动态加载和类加载机制详解 【胖虎的逆向之路】02——Android整体加壳原理详解&实现 文章目录【胖虎的逆向之路】03——Android脱壳办法罗列&脱壳原理详解前言一、主流脱壳方法…

uefi和legacy的区别对比

legacy&#xff1a;[ˈleɡəsi]&#xff0c;遗产、遗留。 uefi&#xff1a;Unified Extensible Firmware Interface&#xff0c;统一可扩展固件接口。 当我们自己重装或安装操作系统的时候&#xff0c;可能会遇到硬盘的uefi和legacy两种&#xff0c;不过大多数人并不知道uefi和…

低代码开发前景如何?大家都真的看好低代码开发吗?

栖低代码开发前景如何&#xff0c;大家都真的看好低代码开发吗&#xff1f;之前有些过很多关于低代码的内容&#xff0c;这篇就来梳理下国内外低代码开发平台发展现状及前景。 关于低代码解读看这篇>> 什么是低代码&#xff08;Low-Code&#xff09;&#xff1f; 关于低…

SpreadJS.Release.16.0.2 Crack by Xacker

SpreadJS拥有 500 多个 Excel 函数的世界销量第一的 JavaScript 电子表格 快速提供真正类似 Excel 的电子表格体验 - 对 Excel 零依赖。创建财务应用程序&#xff0c;仪表板,图表,数据透视表,性能基准,科学实验室笔记本&#xff0c;以及其他类似的 JavaScript 电子表格应用程序…

77. 语言模型以及代码实现

1. 语言模型 给定文本序列 x1,…,xT,语言模型的目标是估计联合概率p&#xff08;x1,…,xT&#xff09;它的应用包括 做预训练模型&#xff08;eg BERT&#xff0c;GPT-3&#xff09;生成文本&#xff0c;给定前面几个词&#xff0c;不断使用xt~p(x1,…,xt-1) 来生成后续文本判…

CSS选择器整理学习(上)

在前端项目开发中&#xff0c;有时候需要对特殊的元素进行特殊的处理&#xff0c;但有时候元素的位置不确定、层级不确定、数量不确定等问题&#xff0c;导致我们没办法进行元素的选择&#xff0c;这个时候我们就需要用到元素选择器了。 一、CSS选择器 1、.class 选择器例子…

图像处理解决流程--外观检测

一、图像外观检测和面积计算 1、获取标准图像&#xff0c;提取要测定的区域&#xff08;截取成多个ROI&#xff09; 2、将目标图像的位置进行平移和旋转&#xff08;将目标图像和标准图像进行重叠&#xff09; 3、根据标准图像的区域进行以此计算目标图像的信息 4、判断统计 二…

Ajax基础

Ajax 是 Asynchronous JavaScript and XML&#xff08;异步 JavaScript 和 XML&#xff09;的简写 Ajax 中的异步&#xff1a;可以异步地向服务器发送请求&#xff0c;在等待响应的过程中&#xff0c;不会阻塞当前页面&#xff0c;浏览器可以做自己的事情。直到成功获取响应后…

Maven高级进阶

文章目录1&#xff0c;分模块开发1.1 分模块开发设计1.2 分模块开发实现1.2.1 环境准备1.2.2 抽取domain层步骤1:创建新模块步骤2:项目中创建domain包步骤3:删除原项目中的domain包步骤4:建立依赖关系步骤5:编译maven_02_ssm项目步骤6:将项目安装本地仓库1.2.3 抽取Dao层步骤1:…

iOS vue devtools工具的手把手安装,及Vue.js not detected的解决

使用vue插件Vue.js devtools 一.通过谷歌商店直接下载&#xff08;要翻墙&#xff09; 二.不翻墙的方法&#xff1a; 1.官网下载 git地址&#xff1a;https://github.com/vuejs/devtools git clone https://github.com/vuejs/devtools2.完成后命令行里切到该目录下&#x…

AppScan绕过登录验证码深入扫描

系列文章 AppScan介绍和安装 AppScan 扫描web应用程序 AppScan被动手动探索扫描 第四节-绕过登录验证码深入扫描 我们工作中最长碰到的工作场景是网站采用https协议&#xff0c;这时我们要用appScan进行扫描时&#xff0c;就需要先安装证书 1.证书安装 1.新建一个文件&…

渗透测试— —扫描与爆破账号

渗透测试— —扫描与爆破靶机账号 1 扫描与爆破账号流程 注意&#xff1a;仅用于教学与实验&#xff0c;不能用于攻击&#xff0c;否则后果自负 扫描&#xff1a;主机探测与端口扫描。&#xff08;主机探测&#xff1a;目标主机是存活&#xff0c;端口扫描&#xff1a;在线主…

总结 62 种在深度学习中的数据增强方式

数据增强 数据增强通常是依赖从现有数据生成新的数据样本来人为地增加数据量的过程 这包括对数据进行不同方向的扰动处理 或使用深度学习模型在原始数据的潜在空间(latent space)中生成新数据点从而人为的扩充新的数据集 这里我们需要区分两个概念&#xff0c;即增强数据和…