【VUE基礎】VUE3第五節—核心語法之ref標簽、props

ref標簽

作用:用于注冊模板引用。

  • 用在普通DOM標簽上,獲取的是DOM節點。

  • 用在組件標簽上,獲取的是組件實例對象。

用在普通DOM標簽上:
在這里插入圖片描述

<template><div class="person"><h1 ref="title1">C學安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><button @click="showLog">點我打印內容</button></div>
</template><script lang="ts" setup name="Person">import {ref} from 'vue'let title1 = ref()let title2 = ref()let title3 = ref()function showLog(){// 通過id獲取元素  在dom標簽上需要設置id=title1// const t1 = document.getElementById('title1')// 打印內容// console.log((t1 as HTMLElement).innerText)// console.log((<HTMLElement>t1).innerText)// console.log(t1?.innerText)/************************************/// 通過ref獲取元素console.log(title1.value)console.log(title2.value)console.log(title3.value)}
</script>

用在組件標簽上:
在父組件中設置ref標簽,獲取到的是子組件對象,還沒有獲取到真正數據
例如
在這里插入圖片描述

//APP.vue
<template><Person ref="xiaoc123"/><button @click="test">測試</button>
</template><script lang="ts" setup>import Person from './components/Person.vue'import {ref} from 'vue'let xiaoc123  = ref()function test(){console.log(xiaoc123.value);}
</script>
//Person.vue
<template><div class="person"><h1 ref="title1">C學安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><!-- <button @click="showLog">點我打印內容</button> --></div>
</template><script lang="ts" setup name="Person">
import { ref } from 'vue'let name = ref('xiaoc')
let age = ref(20)
</script>

以上代碼并沒有獲取到Person.vue中具體的name,age值
需要使用defineExpose將組件中的數據交給外部,就可以獲取到name,age值
例如:
在這里插入圖片描述

//APP.vue
<template><Person ref="xiaoc123"/><button @click="test">測試</button>
</template><script lang="ts" setup>import Person from './components/Person.vue'import {ref} from 'vue'let xiaoc123  = ref()function test(){console.log(xiaoc123.value);}
</script>
//Person.vue
<template><div class="person"><h1 ref="title1">C學安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><!-- <button @click="showLog">點我打印內容</button> --></div>
</template><script lang="ts" setup name="Person">
import { ref,defineExpose } from 'vue'let name = ref('xiaoc')
let age = ref(20)defineExpose({name,age})

Props

在使用

<script setup>
const props = defineProps(['foo'])console.log(props.foo)
</script>

除了使用字符串數組來聲明 props 外,還可以使用對象的形式:

// 使用 <script setup>
defineProps({title: String,likes: Number
})

如果你正在搭配 TypeScript 使用

<script setup lang="ts">
defineProps<{title?: stringlikes?: number
}>()</script>

傳遞不同的值類型

在上述的兩個例子中,我們只傳入了字符串值,但實際上任何類型的值都可以作為 props 的值被傳遞。

Number?

<!-- 雖然 `42` 是個常量,我們還是需要使用 v-bind -->
<!-- 因為這是一個 JavaScript 表達式而不是一個字符串 -->
<BlogPost :likes="42" /><!-- 根據一個變量的值動態傳入 -->
<BlogPost :likes="post.likes" />

Boolean?

<!-- 僅寫上 prop 但不傳值,會隱式轉換為 `true` -->
<BlogPost is-published /><!-- 雖然 `false` 是靜態的值,我們還是需要使用 v-bind -->
<!-- 因為這是一個 JavaScript 表達式而不是一個字符串 -->
<BlogPost :is-published="false" /><!-- 根據一個變量的值動態傳入 -->
<BlogPost :is-published="post.isPublished" />

Array?

<!-- 雖然這個數組是個常量,我們還是需要使用 v-bind -->
<!-- 因為這是一個 JavaScript 表達式而不是一個字符串 -->
<BlogPost :comment-ids="[234, 266, 273]" /><!-- 根據一個變量的值動態傳入 -->
<BlogPost :comment-ids="post.commentIds" />

Object?

<!-- 雖然這個對象字面量是個常量,我們還是需要使用 v-bind -->
<!-- 因為這是一個 JavaScript 表達式而不是一個字符串 -->
<BlogPost:author="{name: 'Veronica',company: 'Veridian Dynamics'}"/><!-- 根據一個變量的值動態傳入 -->
<BlogPost :author="post.author" />

代碼演示:
指定固定數據類型

// 定義一個接口,限制每個Person對象的格式
export interface PersonInter {
id:string,
name:string,age:number
}// 定義一個自定義類型Persons
export type Persons = Array<PersonInter>

App.vue中代碼:

<template><Person :list="persons"/>
</template><script lang="ts" setup name="App">
import Person from './components/Person.vue'
import {reactive} from 'vue'import {type Persons} from './types'let persons = reactive<Persons>([{id:'e98219e12',name:'張三',age:18},{id:'e98219e13',name:'李四',age:19},{id:'e98219e14',name:'王五',age:20}])
</script>

Person.vue中代碼:

<template>
<div class="person">
<ul><li v-for="item in list" :key="item.id">{{item.name}}--{{item.age}}</li></ul>
</div>
</template><script lang="ts" setup name="Person">
import {defineProps} from 'vue'
import {type PersonInter} from '@/types'// 第一種寫法:僅接收
// const props = defineProps(['list'])// 第二種寫法:接收+限制類型
// defineProps<{list:Persons}>()// 第三種寫法:接收+限制類型+指定默認值+限制必要性
let props = withDefaults(defineProps<{list?:Persons}>(),{list:()=>[{id:'asdasg01',name:'小豬佩奇',age:18}]
})
console.log(props)
</script>

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

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

相關文章

RDNet實戰:使用RDNet實現圖像分類任務(一)

論文提出的模型主要基于對傳統DenseNet架構的改進和復興&#xff0c;通過一系列創新設計&#xff0c;旨在提升模型性能并優化其計算效率&#xff0c;提出了RDNet模型。該模型的主要特點和改進點&#xff1a; 1. 強調并優化連接操作&#xff08;Concatenation&#xff09; 論文…

CF328A IQ Test 題解

思路 依題意模擬即可。 注意要保證是整數。 代碼 #include<bits/stdc.h> #include<cstring> #include<queue> #include<set> #include<stack> #include<vector> #include<map> #define ll long long #define lhs printf("\n…

kotlin flow collect collectLatest 區別

在 Kotlin 協程庫中&#xff0c;collect 和 collectLatest 都是用于收集 Flow 中發射的數據的方法&#xff0c;但它們在處理數據和響應新數據的方式上有所不同。 collect collect 是一個掛起函數&#xff0c;用于收集 Flow 中發射的所有數據。它會按順序處理每一個發射的數據…

UML圖書管理系統用例圖示例

新書速覽|《UML 2.5基礎、建模與設計實踐》新書速覽|《UML 2.5基礎、建模與設計實踐 【例4.4】圖書管理系統用例圖。 圖書管理系統按其業務功能分成借閱者管理、圖書管理、借書、還書和用戶管理等幾部分&#xff0c;這些職能對應于系統的不同組織部門。 1&#xff09;系統參…

echarts 中國地圖json文件

阿里云地理網址 DataV.GeoAtlas地理小工具系列 (aliyun.com) 地圖cp 修改參考 {"type": "FeatureCollection","features": [{"type": "Feature","properties": { "id": "65", "size&…

Actor-Critic 算法

在強化學習&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;Actor-Critic 算法是一類強大的策略梯度方法&#xff0c;結合了策略&#xff08;Policy&#xff09;和價值函數&#xff08;Value Function&#xff09;兩種方法的優點。本文將詳細介紹 Actor-Crit…

[TypeScript]手擼LFU

[TypeScript]手擼LFU 最近做筆試的時候遇到了要手擼LFU的題目&#xff0c;LFU在vue源碼里還是有使用的&#xff0c;例如keep-alive的實現機制就是基于它來搞的。不多說了&#xff0c;直接上代碼。 代碼 // 雙向鏈表node class DoubleLinkNode {key: number;val: number;freq…

阿一課代表今日分享之使用dnscat2 進行dns隧道反彈shell(直連模式linux對linux)

DNS介紹 DNS是域名系統(Domain Name System)的縮寫&#xff0c;是因特網的一項核心服務&#xff0c;它作為可以將域名和IP地址相互映射的一個分布式數據庫&#xff0c;能夠使人更方便的訪問互聯網&#xff0c;而不用去記住能夠被機器直接讀取的IP數串。 DNS的記錄類型有很多&a…

歸并排序算法Python實現

歸并排序原理和步驟 1. 將數組分成兩半&#xff0c;直到每個子數組的長度為1 首先&#xff0c;將數組分成兩半。如果數組的長度大于1&#xff0c;將其從中間分割為兩個子數組。對每個子數組繼續進行這個過程&#xff0c;直到每個子數組的長度為1。此時&#xff0c;所有子數組…

L4 Persistence and Streaming

參考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下為代碼的實現。 這里主要是加入了memory&#xff0c;這樣通過self.graph graph.compile(checkpointercheckpointer)就可以加入持久性的檢查點通過thread {"configurable"…

項目實戰--Spring Boot + GraphQL實現實時數據推送

背景 用戶體驗不斷提升而3對實時數據的需求日益增長&#xff0c;傳統的數據獲取方式無法滿足實時數據的即時性和個性化需求。 GraphQL作為新興的API查詢語言&#xff0c;提供更加靈活、高效的數據獲取方案。結合Spring Boot作為后端框架&#xff0c;利用GraphQL實現實時數據推…

Java筆試|面試 —— 對多態性的理解

談談對多態性的理解&#xff1a; 一個事物的多種形態&#xff08;編譯和運行時狀態不一致性&#xff09; 實現機制&#xff1a;通過繼承、重寫和向上轉型&#xff08;Object obj new 子類()&#xff09;來實現。 1.廣義上的理解 子類對象的多態性&#xff0c;方法的重寫&am…

visual studio 2022 在使用open3d出現的問題及解決方式

當出現以下問題&#xff1a; 使用open3d::utility::LogInfo系列出現LNK2001問題&#xff0c;如下所示&#xff1a;LNK2001 無法解析的外部符號 “char __cdecl fmt::v6::internal::decimal_point_impl(class fmt::v6::internal::locale_ref)” LNK2001 無法解析的外部符號 “p…

【C/C++】SDKDDKVer.h和WinSDKVer.h詳解及二者區別

一.SDKDDKVer.h介紹 SDKDDKVer.h 是一個在 Windows 軟件開發中常見的頭文件&#xff0c;它用于定義軟件開發工具包&#xff08;SDK&#xff09;和驅動開發工具包&#xff08;DDK&#xff09;的版本信息。這個文件通常位于 Visual Studio 安裝目錄下的 Include 子目錄中。 …

GD32MCU如何實現掉電數據保存?

大家在GD32 MCU應用時&#xff0c;是否會碰到以下應用需求&#xff1a;希望在MCU掉電時保存一定的數據或標志&#xff0c;用以記錄一些關鍵的數據。 以GD32E103為例&#xff0c;數據的存儲介質可以選擇內部Flash或者備份數據寄存器。 如下圖所示&#xff0c;片內Flash具有10年…

學習數據庫的增刪改查

一、創建數據庫和表 在進行增刪改查操作之前&#xff0c;我們需要創建一個數據庫和表。 1. 創建數據庫 使用 CREATE DATABASE 語句創建數據庫&#xff1a; CREATE DATABASE test_db;2. 選擇數據庫 使用 USE 語句選擇數據庫&#xff1a; USE test_db;3. 創建表 使用 CREA…

詳解C語言結構體

文章目錄 1.結構體的聲明1.1 結構體的基礎知識1.2 結構的聲明1.3 結構成員的類型 1.4結構體變量的定義和初始化2.結構體成員的訪問3.結構體傳參 1.結構體的聲明 1.1 結構體的基礎知識 結構是一些值的集合&#xff0c;這些值稱為成員變量。結構的每個成員可以是不同類型的變量 …

【密碼學】分組密碼概述

一、分組密碼的定義 分組密碼和流密碼都是對稱密碼體制。 流密碼&#xff1a;是將明文視為連續的比特流&#xff0c;對每個比特或字節進行實時加密&#xff0c;而不將其分割成固定的塊。流密碼適用于加密實時數據流&#xff0c;如網絡通信。分組密碼&#xff1a;是將明文數據…

【React】Ant Design -- Table分頁功能實現

實現步驟 為Table組件指定pagination屬性來展示分頁效果在分頁切換事件中獲取到篩選表單中選中的數據使用當前頁數據修改params參數依賴引起接口重新調用獲取最新數據 const pageChange (page) > {// 拿到當前頁參數 修改params 引起接口更新setParams({...params,page})…

翰德恩咨詢賦能材料行業上市公司,共筑IPD管理體系新篇章

賦能背景概覽 坐落于江蘇的某材料行業領軍企業&#xff0c;作為國內無機陶瓷膜元件及成套設備領域的佼佼者&#xff0c;以其龐大的生產規模、豐富的產品系列及卓越的研發實力&#xff0c;屹立行業之巔二十余年。公司不僅在新材料研發、技術創新、工藝設計、設備制造及整體解決…