v-bind动态绑定

article/2025/9/22 16:47:44

目录

一、 v-bind的基本使用

 1.  v-bind的基本使用

 2.  Class 与 Style 绑定

二、 v-bind动态绑定class

 1.   v-bind动态绑定class(对象语法)

 2.  v-bind动态绑定class(数组用法)

三、 v-for和v-bind结合

四、v-bind动态绑定style

 1.  v-bind动态绑定style(对象语法)

 2.  v-bind动态绑定style(数组语法)


一、 v-bind的基本使用

 1.  v-bind的基本使用

​     某些时候我们并不想将变量放在标签内容中,像这样 <h2>{{message}}</h2> 是将变量h2标签括起来,类似 js的innerHTML

      但是我们期望将变量  imgURL  写在如下位置,想这样 <img src="imgURL" alt=""> 导入图片是希望动态获取图片的链接,此时的 imgURL 并非变量而是 字符串 imgURL,如果要将其生效为变量,需要使用到一个标签 v-bind:,像这样<img v-bind:src="imgURL" alt="">,而且这里也不能使用Mustache语法,类似<img v-bind:src="{{imgURL}}" alt="">,这也是错误的。 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>v-bind的基本使用</title>
</head>
<body>
  <div id="app">
    <!-- 错误的做法这里不能使用Mustache语法 -->
    <!-- <img v-bind:src="{{imgURL}}" alt=""> -->
    <!-- 正确的做法使用v-bind指令 -->
    <img v-bind:src="imgURL" alt="">
    <a v-bind:href="aHerf"></a>
    <!-- 语法糖写法 -->
    <img :src="imgURL" alt="">
    <a :href="aHerf"></a>

  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el:"#app",
      data:{
        message:"你好啊",
        imgURL:"https://cn.bing.com/th?id=OIP.NaSKiHPRcquisK2EehUI3gHaE8&pid=Api&rs=1",
        aHerf:"http://www.baidu.com"
      }
    })
  </script>
</body>
</html>

​ 此时vue对象中定义的 imgURL 变量和 aHerf 变量可以动态的绑定到img标签的src属性和a标签的href属性。v-bind:由于用的很多,vue对他有一个语法糖的优化写法也就是:,此时修改imgURL变量图片会重新加载。 

 2.  Class 与 Style 绑定

     操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。v-bind 在处理 class 和 style 时,表达式结果的类型除了字符串之外,还可以是对象或数组。

      v-bind:class 可以简写为 :class。

二、 v-bind动态绑定class

 1.   v-bind动态绑定class(对象语法)

 有时候我们期望对Dom元素的节点的class进行动态绑定,选择此Dom是否有指定class属性。例如,给h2标签加上class="active",当Dom元素有此class时候,变红<style>.active{color:red;}</style>,在写一个按钮绑定事件,点击变黑色,再次点击变红色。

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

        <style>

            .active {

                color:#f00;

            }

        </style>

    </head>

    <body>

        <div id="app">

            <h2 :class="{active:isactive}" @click="change">{{msg}}</h2>

             <h2 :class="changeActive()" @click="change">{{msg}}</h2>

        </div>

        <script>

            const vm = new Vue({

                el:'#app',

                data(){

                    return {

                        msg:'动态绑定对象',

                        isactive:false

                    }

                },

                methods:{

                    change(){

                        this.isactive = !this.isactive

                    },

                    changeActive(){

                        return {active:this.isactive}

                    }

                }

               

            })

        </script>

    </body>

</html>

定义两个变量 active 和 isActive,在Dom元素中使用 :class={active:isActive},此时绑定的class='active',isActive为true,active显示,定义方法change()绑定在按钮上,点击文字this.isActive = !this.isActive,控制Dom元素是否有 class='active' 的属性。 

 

 

 2.  v-bind动态绑定class(数组用法)

​ class属性中可以放数组,会依次解析成对应的class。

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>

    <body>

        <div id="app">

            <h2 :class="['active','aaa']">我们正在学习vue</h2>

            <h2 :class="[active,aaa]">我们正在学习vue</h2>

            <h2 :class="getStyle()">我们正在学习vue</h2>

        </div>

        <script>

            /* 数组中加引号和不加引号有区别  

            加引号:表示字符串 是固定的,

            不加引号:表示变量是不固定的 */

            const vm = new Vue({

                el:'#app',

                data(){

                    return {

                        active:'isactive',

                        aaa:'bbb'

                    }

                },

                methods:{

                    getStyle(){

                        return [this.active,this.aaa]

                    }

                }

               

            })

        </script>

    </body>

</html>

  1. ​ 加上单引号的表示字符串

  2. ​ 不加的会当成变量

  3. ​ 可以直接使用方法返回数组对象

 

三、 v-for和v-bind结合

​ 使用v-for和v-bind实现一个小demo,将电影列表展示,并点击某一个电影列表时候,将此电影列表变成红色。

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

        <style>

            .active {

                color: #f00;

            }

        </style>

    </head>

    <body>

        <div id="app">

            <ul>

                <!-- <li v-for="(item,index) in movies" :key="index" :class="{active:currentIndex==index}" @click="change(index)">{{item}}</li> -->

                <li v-for="(item,index) in movies" :key="index" :class="currentIndex==index?'active':''" @click="change(index)">{{item}}</li><!-- 动态绑定三元表达式 -->

            </ul>

        </div>

        <script>

            const vm = new Vue({

                el: '#app',

                data() {

                    return {

                        currentIndex: 0,

                        movies: ["海王", "海贼王", "火影忍者", "复仇者联盟"]

                    }

                },

                methods: {

                    change(i) {

                        /*  this.currentIndex = i */

                        if (this.currentIndex == i) return

                        this.currentIndex = i

                    }

                }

            })

        </script>

    </body>

</html>

 ​ v-for时候的index索引,给每行绑定事件点击事件,点击当行是获取此行索引index并赋值给currentIndex,使用v-bind:绑定class,当index===currentIndexDom元素有active的class,颜色变红。

 

四、v-bind动态绑定style

 1.  v-bind动态绑定style(对象语法)

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>

    <body>

        <div id="app">

            <h2 :style="{fontSize:'50px'}">我们爱学习</h2>

            <h2 :style="{fontSize:fontsize}">我们爱学习</h2>

            <h2 :style="getStyle()">我们爱学习</h2>

        </div>

        <script>

            const vm = new Vue({

                el:'#app',

                data(){

                    return {

                        fontsize:40+'px'

                    }

                },

                methods:{

                    getStyle(){

                        return {fontSize:this.fontsize}

                    }

                }

               

            })

        </script>

    </body>

</html> 

v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名: 

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> 

 2.  v-bind动态绑定style(数组语法)

v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:

 <div v-bind:style="[baseStyles, overridingStyles]"></div>

 ​ 类似绑定class,绑定style也是一样的。 

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>

    <body>

        <div id="app">

            <h2 :style="[baseStyle]">我们爱学习</h2>

            <h2 :style="['baseStyle']">我们爱学习</h2><!-- 无意义 -->

            <h2 :style="getStyle()">我们爱学习</h2>

        </div>

        <script>

            const vm = new Vue({

                el:'#app',

                data(){

                    return {

                      baseStyle:{background:'#f00'}

                    }

                },

                methods:{

                    getStyle(){

                        return [this.baseStyle]

                    }

                }

               

            })

        </script>

    </body>

</html>


有关v-bind 与class 和style 绑定相关的内容请参考:Class 与 Style 绑定 — Vue.jsVue.js - The Progressive JavaScript Frameworkhttps://cn.vuejs.org/v2/guide/class-and-style.html


http://chatgpt.dhexx.cn/article/BNVESSe9.shtml

相关文章

Vue中动态绑定

目录 1. v-bind动态绑定class 1.1. v-bind动态绑定class(对象语法) 1.2. v-bind动态绑定class(数组用法) 2. v-for和v-bind结合 3. v-bind动态绑定style 3.1 v-bind动态绑定style(对象语法) 3.2 v-bind动态绑定style(数组语法) 1. v-bind动态绑定class 1.1. v-bind动态绑…

静态绑定与动态绑定

研究问题&#xff1a; https://www.cnblogs.com/ygj0930/p/6554103.html 要点&#xff1a; 一&#xff1a;绑定   把一个方法与其所在的类/对象 关联起来叫做方法的绑定。绑定分为静态绑定&#xff08;前期绑定&#xff09;和动态绑定&#xff08;后期绑定&#xff09;。 …

动态绑定

文章目录 动态绑定发生的条件在构造方法中调用重写的方法(一个坑) 动态绑定 动态绑定也叫运行时绑定&#xff0c;通俗的讲, 在Java中, 调用某 个类的方法,究竟执行了哪段代码(是父类方法的代码还 是子类方法的代码) , 要看究竟这个引用指向的是父类对 象还是子类对象. 这个过程…

动态绑定,多态(带你从本质了解多态)

在上一章节中&#xff0c;我们讲述了虚函数和虚函数表&#xff0c;我们知道了不管在类中有多少个虚函数&#xff0c;都不会使类的大小扩大&#xff0c;在this指针中&#xff0c;只会多出一个虚函数表的地址&#xff0c;是this指针的第一个内容&#xff0c;在虚函数表中&#xf…

数据结构——哈希表(Hash表)、哈希碰撞

1.概述 哈希表&#xff08;也叫散列表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;直接访问在内存存储位置的数据结构。就是一种以 键-值(key-value) 存储数据的结构&#xff0c;我们只要输入key&#xff0c;就可查找到其对应的值。 hash函数就是根据key计算…

24-哈希碰撞攻击是什么?

24-哈希碰撞攻击是什么&#xff1f; 最近哈希表碰撞攻击&#xff08;Hashtable collisions as DOS attack&#xff09;的话题不断被提起&#xff0c;各种语言纷纷中招。本文结合PHP内核源码&#xff0c;聊一聊这种攻击的原理及实现。 哈希表碰撞攻击的基本原理 哈希表是一种…

hashcode及哈希碰撞

数据结构中&#xff1a; 用来映射元素关键字(能唯一标识该元素&#xff0c;类似数据库中的主键可以唯一标识一条记录)和元素的内存地址的关系(解决树&#xff0c;线程表等结构中元素和位置无确定关系&#xff0c;查找时需要进行不断比较的问题。顺序查找的比较结果是和不等。树…

hash和hash碰撞以及解决方案

hash&#xff1a; Hash&#xff0c;一般翻译做“散列”&#xff0c;也有直接音译为“哈希”的&#xff0c;就是把任意长度的输入&#xff08;又叫做预映射&#xff0c; pre-image&#xff09;&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#xff0c;该输出就是…

哈希碰撞攻击与防范机制

1.引子 哈希表的原理是用数组来保存键值对&#xff0c;键值对存放的位置&#xff08;下标&#xff09;由键的哈希值决定&#xff0c;键的哈希值可以在参数时间内计算出来&#xff0c;这样哈希表插入、查找和删除的时间复杂度为O(1)&#xff0c;但是这是理想的情况下&#xff0…

HashMap的实现原理及hash冲突(碰撞)解决方法

HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时&#xff0c;系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法&#xff0c;都可通过该方法获得它的 hashCode 值。得到这…

解决Hash碰撞冲突方法总结

Hash碰撞冲突 我们知道&#xff0c;对象Hash的前提是实现equals()和hashCode()两个方法&#xff0c;那么HashCode()的作用就是保证对象返回唯一hash值&#xff0c;但当两个对象计算值一样时&#xff0c;这就发生了碰撞冲突。如下将介绍如何处理冲突&#xff0c;当然其前提是一…

哈希表碰撞攻击的基本原理

原文地址&#xff1a;http://blog.jobbole.com/11516/ 来源&#xff1a;张洋 最近哈希表碰撞攻击&#xff08;Hashtable collisions as DOS attack&#xff09;的话题不断被提起&#xff0c;各种语言纷纷中招。本文结合PHP内核源码&#xff0c;聊一聊这种攻击的原理及实现。 …

hash碰撞处理方法

目录 哈希表 哈希冲突 解决碰撞方法 1、开放定址法 a)、线性探测法 a)、二次探测法 c&#xff09;伪随机探测 2、再哈希法 3、拉链法 4、建立公共溢出区 哈希表 是一种实现关联数组抽象数据类型的数据结构&#xff0c;这种结构可以将关键码映射到给定值。 简单来说…

通俗讲解哈希表,哈希碰撞问题!

哈希表是个啥&#xff1f; 小白&#xff1a; 庆哥&#xff0c;什么是哈希表&#xff1f;这个哈希好熟悉&#xff0c;记得好像有HashMap和HashTable之类的吧&#xff0c;这是一样的嘛&#xff1f;&#x1f60a; 庆哥&#xff1a; 这个哈希确实经常见&#x1f602;&#xff0c;足…

哈希碰撞是个什么鬼?

什么是哈希算法&#xff1f; 哈希算法&#xff0c;也叫哈希函数&#xff0c;散列函数&#xff0c;是将任意长度的二进制值映射为较短的固定长度的二进制值&#xff0c;即哈希值。哈希算法是一种只能加密&#xff0c;不能解密的特殊算法。 什么是哈希碰撞&#xff1f; 如果不…

哈希值与哈希碰撞

哈希碰撞 一、什么是哈希&#xff1f; 哈希&#xff08;hash&#xff09;就是讲不同的输入&#xff0c;映射成独一无二、固定长度的值&#xff0c;既哈希值。 我们可以理解为商品的条形码。任何商品都会有一个固定长度而又固定的条码。它的作用就类似于哈希。 哈希值长度可…

【Java】哈希冲突(哈希碰撞)

文章目录 为什么发生哈希冲突&#xff08;哈希碰撞&#xff09;能否完全避免哈希冲突常用处理哈希冲突的方法1.开放地址法1.1线性探测再散列缺点&#xff1a;二次聚集 1.2二次探测再散列1.3伪随机探测再散列 2.再哈希地址法3.链地址法4.建立公共溢出区 为什么发生哈希冲突&…

什么是哈希,哈希表,哈希函数,哈希碰撞?

什么是哈希&#xff1f; 比方我有个原始值&#xff0c;S[“老铁双击666”,‘感谢老铁送的飞机’]&#xff0c; 通过某种算法&#xff08;比如java的hasecode(获得变量的物理地址)&#xff09;得到的666这个就是“哈希码“&#xff08;将字符串转换成尽可能不重复的int类型数字…

解决哈希碰撞的方法

什么是hash表 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集&#xff08;区间&#xff09;上&#xff0c;并以关键字在地址集中的“像”作为记录在表中的存储位置&#xff0c;这种表便称为哈希表&#xff0c;这一映像过程称为哈希造表或…

公网IP/内网IP:

转自&#xff1a;http://hi.baidu.com/qkjzsjqsehailte/item/1042151cc0959f426926bbb4 IP地址分配 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的&#xff1a;网络号和主机号。其中网络号标识一个物理的网络&#xff0c;同一个网络上所有主机需要同…