Vue3中v-bind指令用法詳解

在 Vue 3 中,v-bind?是一個核心指令,用于動態綁定 HTML 屬性或組件的 props 到 Vue 實例的數據。以下是詳細講解:


一、基礎用法

1. 綁定單個屬性

vue

復制

下載

<template><!-- 綁定 img 的 src 屬性 --><img v-bind:src="imageUrl"><!-- 簡寫形式(推薦) --><img :src="imageUrl">
</template><script setup>
import { ref } from 'vue';
const imageUrl = ref('https://example.com/image.jpg');
</script>
2. 綁定多個屬性(對象語法)

vue

復制

下載

<template><div v-bind="attrsObject"></div>
</template><script setup>
import { reactive } from 'vue';
const attrsObject = reactive({id: 'container',class: 'main-box','data-info': 'vue3'
});
</script>

渲染結果:

html

復制

下載

運行

<div id="container" class="main-box" data-info="vue3"></div>

二、特殊場景用法

1. 動態綁定屬性名

vue

復制

下載

<template><button :[dynamicAttr]="value">按鈕</button>
</template><script setup>
import { ref } from 'vue';
const dynamicAttr = ref('title');
const value = ref('提示信息');
</script>

渲染結果:

html

復制

下載

運行

<button title="提示信息">按鈕</button>
2. 綁定 class

vue

復制

下載

<template><!-- 對象語法 --><div :class="{ active: isActive, 'text-danger': hasError }"></div><!-- 數組語法 --><div :class="[activeClass, errorClass]"></div>
</template><script setup>
import { ref } from 'vue';
const isActive = ref(true);
const hasError = ref(false);
const activeClass = ref('active');
const errorClass = ref('text-danger');
</script>
3. 綁定 style

vue

復制

下載

<template><!-- 對象語法(駝峰或短橫線) --><div :style="{ color: textColor, fontSize: fontSize + 'px' }"></div><!-- 數組語法(合并多個對象) --><div :style="[baseStyles, overridingStyles]"></div>
</template><script setup>
import { reactive } from 'vue';
const textColor = ref('red');
const fontSize = ref(16);
const baseStyles = reactive({ padding: '10px' });
const overridingStyles = reactive({ margin: '20px' });
</script>

三、組件 Prop 綁定

vue

復制

下載

<template><!-- 傳遞靜態值 --><ChildComponent title="靜態標題" /><!-- 動態綁定 prop --><ChildComponent :title="dynamicTitle" /><!-- 綁定整個對象 --><ChildComponent v-bind="componentProps" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';
import { ref, reactive } from 'vue';const dynamicTitle = ref('動態標題');
const componentProps = reactive({title: '對象綁定標題',content: '內容文本'
});
</script>

四、修飾符

1.?.camel?- 將屬性名轉為駝峰式

vue

復制

下載

<svg :view-box.camel="viewBox"></svg>
<!-- 渲染為 viewBox(而非 view-box) -->
2.?.prop?- 強制綁定為 DOM property

vue

復制

下載

<div :text-content.prop="text"></div>
<!-- 綁定為 element.textContent 而非 HTML 特性 -->

五、注意事項

  1. 避免與靜態屬性混用
    動態綁定的屬性會覆蓋靜態屬性:

    vue

    復制

    下載

    <div id="static" :id="dynamicId"></div>
    <!-- 最終 id 值為 dynamicId -->
  2. 布爾屬性特殊處理
    當綁定值為?nullundefined?或?false?時,屬性會被移除:

    vue

    復制

    下載

    <button :disabled="isDisabled">按鈕</button>
    <!-- 當 isDisabled=false 時,disabled 屬性不渲染 -->
  3. 性能優化
    對大量靜態內容使用?v-bind?會增加運行時開銷,建議靜態內容直接寫屬性值。


六、總結

場景語法示例說明
基礎綁定:src="url"單個屬性綁定
多屬性綁定v-bind="{ id, class: cls }"對象語法批量綁定
動態屬性名:[key]="value"屬性名動態化
Class 綁定:class="{ active: isActive }"對象/數組語法
Style 綁定:style="{ color: activeColor }"內聯樣式綁定
組件 Props<Child :prop="value" />向子組件傳遞動態數據
修飾符:view-box.camel="..."控制綁定行為

通過靈活運用?v-bind,可以高效實現數據驅動視圖的動態更新,是 Vue 響應式系統的核心功能之一。

v-bind="$attrs" 用法講解

在 Vue 3 中,v-bind="$attrs"?是一個非常重要的特性,它用于處理組件間的屬性透傳。讓我詳細解釋它的含義和用法:

一、$attrs?是什么

$attrs?是 Vue 組件實例上的一個特殊屬性,它包含:

  1. 父組件傳遞給子組件但未被聲明為 props?的屬性

  2. 包括 HTML 屬性、自定義屬性、DOM 事件監聽器

  3. 不包含

    • 已聲明的 props

    • class?和?style(在 Vue 3 中它們有單獨的處理機制)

二、v-bind="$attrs"?的作用

html

復制

下載

運行

<child-component v-bind="$attrs"></child-component>

這句代碼的意思是:將當前組件接收到的所有未聲明屬性,透傳給內部的子組件

三、使用場景詳解

場景 1:創建高階組件(屬性透傳)

vue

復制

下載

<!-- Parent.vue -->
<template><ChildComponent title="父組件標題" data-id="123" @custom-event="handleEvent"class="parent-class"/>
</template><!-- ChildComponent.vue -->
<template><div><!-- 將未聲明的屬性透傳給孫子組件 --><GrandChild v-bind="$attrs" /></div>
</template><script setup>
// 只聲明了 title 作為 prop
defineProps(['title'])
</script><!-- GrandChild.vue -->
<template><div><!-- 將接收到的屬性綁定到根元素 --><div v-bind="$attrs">孫子組件</div></div>
</template>

結果:

  • title?被 ChildComponent 作為 prop 接收

  • data-id?和?@custom-event?透傳到 GrandChild

  • GrandChild 的根元素會獲得:data-id="123"?和?custom-event?監聽器

場景 2:禁用默認繼承

vue

復制

下載

<script setup>
defineOptions({inheritAttrs: false // 禁用默認的屬性繼承
})
</script><template><div class="wrapper"><!-- 手動控制屬性綁定位置 --><input v-bind="$attrs" /></div>
</template>
  • 默認情況下,未聲明的屬性會自動綁定到根元素

  • 設置?inheritAttrs: false?后,可以通過?v-bind="$attrs"?手動指定綁定位置

四、Vue 3 中的變化(對比 Vue 2)

特性Vue 2Vue 3
包含內容普通屬性屬性 + 事件監聽器
class/style包含在 $attrs 中不包含在 $attrs 中
事件監聽器在 $listeners 中合并到?$attrs 中
透傳方式需要同時綁定 $attrs 和 $listeners只需綁定 $attrs

五、實際應用技巧

1. 組合式 API 中使用

vue

復制

下載

<script setup>
import { useAttrs } from 'vue'const attrs = useAttrs()
console.log(attrs) // 包含所有未聲明屬性
</script>
2. 過濾特定屬性

vue

復制

下載

<template><div><input v-bind="filteredAttrs"></div>
</template><script setup>
import { computed, useAttrs } from 'vue'const attrs = useAttrs()const filteredAttrs = computed(() => {const { class: _, style: __, ...rest } = attrsreturn rest
})
</script>
3. 多層透傳

vue

復制

下載

<!-- 中間層組件 -->
<template><ThirdPartyComponent v-bind="$attrs" />
</template>

這樣可以將父組件的屬性直接透傳給第三方組件,無需在中間組件中聲明

六、注意事項

  1. 事件監聽器:在 Vue 3 中,事件監聽器會作為?onXxx?屬性出現在?$attrs?中

    js

    復制

    下載

    // $attrs 內容示例
    { "data-id": "123","onCustomEvent": () => {} // 事件監聽器
    }
  2. 與 class/style 的分離

    vue

    復制

    下載

    <Child class="parent-class" style="color:red" /><!-- 子組件中 -->
    <div :class="$attrs.class" :style="$attrs.style"><!-- 其他內容 -->
    </div>

    但更好的做法是直接使用?class?和?style?綁定

  3. 優先級:手動綁定的屬性會覆蓋?$attrs?中的同名屬性

    vue

    復制

    下載

    <input v-bind="$attrs" placeholder="默認">
    <!-- 如果 $attrs 中有 placeholder,會被覆蓋為 "默認" -->

七、為什么需要這個特性

  1. 創建通用組件:當構建可復用的基礎組件(如按鈕、輸入框)時

  2. 減少 props 聲明:避免在中間組件中聲明大量不必要的 props

  3. 與第三方庫集成:將 Vue 組件作為原生 HTML 元素的包裝器

  4. 保持組件接口靈活:允許父組件傳遞任意屬性

總結

v-bind="$attrs"?是 Vue 組件通信的重要機制,它:

  1. 實現屬性自動透傳

  2. 配合?inheritAttrs: false?可精確控制屬性綁定位置

  3. 在 Vue 3 中統一處理屬性和事件

  4. 特別適合創建高階組件和通用基礎組件

合理使用這個特性可以大幅提高組件的可復用性和靈活性,減少不必要的 props 聲明,保持組件接口的簡潔性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84909.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法題(169):最大子段和(分治思想)

審題&#xff1a; 本題需要我們找到區間的最大子段和并輸出結果 思路&#xff1a; 方法一&#xff1a;分治思想 我們可以把給定區間平均分成兩部分&#xff0c;然后獲取左段區間的最大子段和&#xff0c;右段區間的最大子段和&#xff0c;以及跨區間的最大子段和。最后比較出他…

Linux 線程深度解析:從內存管理到線程控制的核心機制

文章目錄 引言一、Linux 線程概念1.1 什么是線程1.2 分頁式存儲管理1.2.1 虛擬地址和頁表的由來1.2.2 物理內存管理struct page 的主要用途 1.2.3 頁表1.2.4 頁目錄結構1.2.5 兩級頁表的地址轉換1.2.6 缺頁異常 1.3 線程的優點1.4 線程缺點1.5 線程異常1.6 線程用途 二、Linux進…

玩轉計算機視覺——按照配置部署paddleOCR(英偉達環境與昇騰300IDUO環境)

英偉達環境安裝 創建虛擬環境 conda create -n paddleOCR python3.10 -y conda activate paddleOCRconda install jupyterlab -y conda install ipykernel -y python -m ipykernel install --user --name paddleOCR --display-name "paddle OCR"下載PaddleOCR的GPU…

Java機器學習全攻略:從基礎原理到實戰案例詳解

在當今AI驅動的技術浪潮中,機器學習已成為Java開發者必須掌握的核心技能之一。本文將系統性地介紹Java機器學習的原理基礎、常用框架,并通過多個實戰案例展示如何在實際項目中應用這些技術。無論你是剛接觸機器學習的Java開發者,還是希望鞏固基礎的中級工程師,這篇文章都將…

eBPF 技術詳解及其在網絡安全領域的應用與挑戰

摘要 eBPF&#xff08;extended Berkeley Packet Filter&#xff09;是 Linux 內核中的一項革命性技術&#xff0c;它允許用戶在不修改內核代碼或加載內核模塊的情況下&#xff0c;安全、高效地運行自定義程序。eBPF 的出現極大地擴展了 Linux 內核的可編程性&#xff0c;使其…

error:MISCONF Redis is configured to save RDB snapshots

一、背景 在使用redis異步驅動方式下&#xff0c;執行hset指令時&#xff0c;報錯 redisAsyncCommand((redisAsyncContext *)c, dumpReply, "hset role:10001", "hset role:10001 name %s age %d sex %s", "mark", 31, "male");二、原…

Android-Mod-Menu 使用教程

目錄 簡介前提條件安裝步驟1. 下載和解壓項目2. 配置 Android Studio3. 安裝到設備 修改游戲 APK1. 確定游戲主活動2. 集成模組菜單方法 1&#xff1a;通過服務啟動&#xff08;推薦&#xff09;方法 2&#xff1a;通過活動啟動&#xff08;僅在游戲檢測模組時使用&#xff09;…

SpringBoot 自動化部署實戰:從環境搭建到 CI/CD 全流程

SpringBoot 自動化部署全流程實戰 一、環境準備&#xff08;開發側&#xff09; 基礎工具鏈安裝&#xff1a; # JDK 17 brew install openjdk17 # Maven 構建工具 brew install maven # Docker 環境 brew install --cask docker項目配置驗證&#xff1a; <!-- pom.xml 關…

Flutter動畫與交互:打造流暢用戶體驗的完整指南

在移動應用開發中&#xff0c;流暢的動畫和自然的交互是提升用戶體驗的關鍵因素。Flutter作為Google推出的跨平臺UI工具包&#xff0c;提供了一套強大而靈活的動畫系統&#xff0c;使開發者能夠輕松創建專業級的動畫效果。本文將深入探討Flutter中的動畫與交互技術&#xff0c;…

山東大學軟件學院項目實訓:基于大模型的模擬面試系統項目總結(九)

在山東大學軟件學院的項目實訓中&#xff0c;團隊成員們圍繞基于大模型的模擬面試系統展開了一系列開發與優化工作。以下是本周項目的核心進展與成果總結。 前端界面優化與 Bug 修復&#xff08;吳尤&#xff09; Logo 顯示問題修復 在項目開發過程中&#xff0c;團隊發現項…

14.vue.js的watch()的注意事項(1)

一、 Q &#xff1a;因為 state 有內部的屬性 也就是id。 因為要追逐id。所以要寫函數&#xff1f;而不能直接監聽state。 只監聽state &#xff0c;監聽不到id的變化嗎&#xff1f; A&#xff1a; 為什么監聽 state 不等于監聽 state.id&#xff1f; 在 Vue 3 中&#xff0…

強化學習入門:價值、回報、策略概念詳解

前言 最近想開一個關于強化學習專欄&#xff0c;因為DeepSeek-R1很火&#xff0c;但本人對于LLM連門都沒入。因此&#xff0c;只是記錄一些類似的讀書筆記&#xff0c;內容不深&#xff0c;大多數只是一些概念的東西&#xff0c;數學公式也不會太多&#xff0c;還望讀者多多指教…

基于“數智立體化三維架構”框架的醫療數智化機制研究

1 研究背景與框架基礎 當前,全球醫療服務體系正經歷深刻的數智化轉型浪潮,人工智能、大數據、云計算等新一代信息技術與醫療健康領域的融合不斷深入,催生了醫療服務模式的革命性變化。在我國,數智化技術已成為提升基層衛生服務質量、促進醫療服務公平可及、增進百姓健康福…

OpenCV CUDA模塊圖像變形------對圖像進行旋轉操作函數rotate()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對圖像進行 GPU 加速的旋轉操作&#xff0c;支持指定旋轉角度、縮放中心偏移和插值方法。是 OpenCV CUDA 模塊中用于圖像旋轉的核心函…

【面板數據】中國與世界各國新能源汽車進出口數據-分類別與不分類別(2017-2024年)

新能源汽車作為中國制造高質量發展的重要代表&#xff0c;其進出口數據不僅反映了我國技術實力與產業格局的變化&#xff0c;也是理解全球綠色交通趨勢、制定國家戰略決策的重要依據。目前國內主流定義判斷標準主要參考中國工信部于2009年發布的《新能源汽車生產企業及產品準入…

亞馬遜云服務器(AWS)會限制用戶使用嗎?深度解讀AWS資源政策

一、AWS的資源邏輯&#xff1a;為什么說"不限速"&#xff1f; AWS采用"按需分配"的資源配置模式&#xff0c;其核心限制并非來自人為設定&#xff0c;而是取決于&#xff1a; 實例類型配置&#xff08;如t2.micro默認CPU積分制&#xff09; 賬戶服務配額…

頂級視頻生成大模型分析:Seedance 1.0 Pro (字節跳動) - 新晉榜首

&#x1f4d6; 目錄 一、概述與市場格局 1.1 AI視頻生成技術現狀1.2 主要競爭者概覽1.3 評測標準與方法 二、頂級模型詳細分析 2.1 Seedance 1.0 Pro (字節跳動) - 新晉榜首2.2 OpenAI Sora - 行業先驅者2.3 Google Veo 3 - 音視頻一體化領航者2.4 快手可靈 2.0 - 國產之光…

【Spring源碼核心篇-08】spring中配置類底層原理和源碼實現

Spring源碼核心篇整體欄目 內容鏈接地址【一】Spring的bean的生命周期https://zhenghuisheng.blog.csdn.net/article/details/143441012【二】深入理解spring的依賴注入和屬性填充https://zhenghuisheng.blog.csdn.net/article/details/143854482【三】精通spring的aop的底層原…

【無標題】在 4K 高分辨率(如 3840×2160)筆記本上運行 VMware 虛擬機時平面太小字體太小(ubuntu)

? 方法一&#xff1a;寫入 ~/.xprofile&#xff08;推薦&#xff09; 這個文件會在你登錄圖形界面前自動執行&#xff0c;適合設置縮放比例等桌面配置。 1. 打開 .xprofile 文件&#xff08;如果沒有會自動創建&#xff09;&#xff1a; nano ~/.xprofile2. 寫入以下內容&a…

「Linux文件及目錄管理」目錄結構及顯示類命令

Linux文件系統的目錄結構 Linux文件系統采用嚴格的樹形結構,所有文件和目錄都從根目錄(/)開始延伸。以下是主要目錄的詳細說明: /bin:存放系統啟動和運行所必需的二進制可執行文件,如ls、cp、mv等基本命令。/etc:存放系統配置文件,如/etc/passwd(用戶賬戶信息)、/et…