【前端面試3+1】18 vue2和vue3父傳子通信的差別、props傳遞的數據在子組件是否可以修改、如何往window上添加自定義屬性、【多數元素】

一、vue2和vue3父傳子通信的差別

1、Vue2

父組件向子組件傳遞數據通常通過props屬性來實現。父組件可以在子組件的標簽中使用v-bind指令將數據傳遞給子組件的props屬性。在子組件中,可以通過props屬性來接收這些數據。這種方式是一種單向數據流的方式,父組件傳遞數據給子組件,子組件接收并渲染這些數據。

vue2中使用props屬性傳遞數據示例:

<!-- ParentComponent.vue -->
<template><ChildComponent :message="parentMessage" />
</template><script>
import ChildComponent from './ChildComponent.vue';export default {data() {return {parentMessage: 'Hello from parent'};},components: {ChildComponent}
};
</script>
<!-- ChildComponent.vue -->
<template><div>{{ message }}</div>
</template><script>
export default {props: ['message']
};
</script>

2、Vue3

? ? ? ? Vue3除了仍然可以使用props來進行父子組件通信外,Vue 3引入了一個新的API,即attrsemit。通過attrs,父組件可以向子組件傳遞屬性,而子組件可以通過emit向父組件發送事件。這種方式使得父子組件之間的通信更加靈活,子組件可以通過emit觸發事件,父組件可以監聽這些事件并做出相應的響應。

????????還引入了v-model指令的改進,使得父組件可以通過v-model指令雙向綁定數據到子組件。這樣父組件可以直接修改子組件中的數據,而不需要通過事件和屬性來進行通信。

在Vue 3中,可以使用attrs屬性傳遞數據的示例代碼如下:

<!-- ParentComponent.vue -->
<template><ChildComponent v-bind="attrs" @child-event="handleChildEvent" />
</template><script>
import ChildComponent from './ChildComponent.vue';export default {data() {return {attrs: {message: 'Hello from parent'}};},components: {ChildComponent},methods: {handleChildEvent(data) {console.log('Received data from child:', data);}}
};
</script>
<!-- ChildComponent.vue -->
<template><button @click="emitEvent">Click me</button>
</template><script>
export default {methods: {emitEvent() {this.$emit('child-event', 'Data from child');}}
};
</script>

父組件通過attrs屬性向子組件傳遞message屬性,子組件通過$emit方法觸發child-event事件,并將數據傳遞給父組件。父組件可以監聽child-event事件并處理子組件傳遞的數據

二、props傳遞的數據在子組件是否可以修改?

不能!?

在Vue中,props 是單向數據流的,意味著父組件傳遞給子組件的 props 數據在子組件中是只讀的,子組件不能直接修改 props 數據。

!!!然而,如果子組件需要修改傳遞下來的數據,可以通過以下方式實現

????????子組件就間接地修改父組件傳遞下來的數據

????????1、在子組件內部使用 data 屬性:子組件可以將 props 數據作為初始值,然后在子組件內部將其賦值給 data 屬性中的變量,從而可以在子組件內部修改這些數據。

<template><div><p>{{ modifiedMessage }}</p><button @click="modifyMessage">Modify Message</button></div>
</template><script>
export default {props: ['message'],data() {return {modifiedMessage: this.message};},methods: {modifyMessage() {this.modifiedMessage = 'Modified message';}}
};
</script>
  1. 2、通過觸發事件向父組件傳遞修改后的數據:子組件可以通過 $emit 方法觸發一個自定義事件,并將修改后的數據傳遞給父組件,由父組件來更新數據。
<template><div><p>{{ message }}</p><button @click="modifyMessage">Modify Message</button></div>
</template><script>
export default {props: ['message'],methods: {modifyMessage() {this.$emit('update:message', 'Modified message');}}
};
</script>

父組件可以監聽子組件觸發的事件,并在事件處理程序中更新數據。

<template><div><ChildComponent :message="parentMessage" @update:message="updateMessage" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {data() {return {parentMessage: 'Hello from parent'};},components: {ChildComponent},methods: {updateMessage(newMessage) {this.parentMessage = newMessage;}}
};
</script>

三、如何往window上添加自定義屬性??

在Vue應用中,如果需要向window對象添加自定義屬性,

方法一、

可以在Vue實例的生命周期鉤子函數中進行操作。

以下是一種常見的方法:

// main.js (或者入口文件)
import Vue from 'vue';
import App from './App.vue';Vue.config.productionTip = false;new Vue({render: h => h(App),created() {// 在Vue實例創建時,向window對象添加自定義屬性window.customProperty = 'Custom Value';}
}).$mount('#app');

方法二、

使用Vue插件來實現向window添加自定義屬性。

// customPlugin.js
const CustomPlugin = {install(Vue) {Vue.prototype.$customProperty = 'Custom Value';window.customProperty = 'Custom Value';}
};export default CustomPlugin;

定義了一個名為CustomPlugin的插件,通過install方法在Vue實例上添加了一個原型屬性$customProperty,同時也向window對象添加了自定義屬性customProperty

然后,在Vue應用的入口文件中使用這個插件:

// main.js (或者入口文件)
import Vue from 'vue';
import App from './App.vue';
import CustomPlugin from './customPlugin';Vue.config.productionTip = false;Vue.use(CustomPlugin);new Vue({render: h => h(App)
}).$mount('#app');

????????通過這種方式,我們可以在整個Vue應用中通過this.$customProperty訪問插件定義的屬性,并且也可以通過window.customProperty在全局范圍內訪問這個屬性。

四、算法【多數元素】?

1.題目

????????給定一個大小為?n?的數組?nums?,返回其中的多數元素。多數元素是指在數組中出現次數?大于?? n/2 ??的元素。

????????你可以假設數組是非空的,并且給定的數組總是存在多數元素。

int majorityElement(int* nums, int numsSize) {
}

2.解題

????????基本思想是在數組中進行投票,將第一個元素作為候選者,然后對數組中的每個元素進行遍歷,如果計數為0,則將當前元素設為候選者,如果和候選者相同則計數加1,否則計數減1。最終選出的候選者就是多數元素。

int majorityElement(int* nums, int numsSize) {int count = 0;int candidate = 0;for (int i = 0; i < numsSize; i++) {if (count == 0) {candidate = nums[i];}if (nums[i] == candidate) {count++;} else {count--;}}return candidate; // if no majority element exists
}

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

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

相關文章

常用位算法

1&#xff0c;位翻轉 n^1 &#xff0c;n 是0 或 1&#xff0c;和 1 異或后位翻轉了。 2&#xff0c; 判斷奇偶&#xff0c;n&1&#xff0c;即判斷最后一位是0還是1&#xff0c;如果結果為0&#xff0c;就是偶數&#xff0c;是1 就是奇數。 獲取 32 位二進制的 1 的個數&a…

python-opencv圖像分割

文章目錄 二值化圖像骨骼連通域分割 二值化 所謂圖像分割&#xff0c;就是將圖像的目標和背景分離開來&#xff0c;更直觀一點&#xff0c;就是把目標涂成白色&#xff0c;背景涂成黑色&#xff0c;言盡于此&#xff0c;是不是恍然大悟&#xff1a;這不就是二值化么&#xff1…

香橙派 AIpro 的系統評測

0. 前言 你好&#xff0c;我是悅創。 今天受邀測評 Orange Pi AIpro開發板&#xff0c;我將準備用這個測試簡單的代碼來看看這塊開發版的性能體驗。 分別從&#xff1a;Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面來測試和分析結果。 下面就…

DevExpress Installed

一、What’s Installed 統一安裝程序將DevExpress控件和庫注冊到Visual Studio中&#xff0c;并安裝DevExpress實用工具、演示應用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜單 Demo Applications 演示應用程序 Launch the Demo…

Python如何查詢數據庫:深入探索與實踐

Python如何查詢數據庫&#xff1a;深入探索與實踐 在數據驅動的世界中&#xff0c;Python作為一種強大且靈活的語言&#xff0c;自然成為了數據庫查詢的得力助手。本文將通過四個方面、五個方面、六個方面和七個方面&#xff0c;詳細探討Python如何查詢數據庫&#xff0c;并力…

elementary OS 8的新消息

原文&#xff1a;Happy Pride! Have Some Updates! ? elementary Blog 這個月&#xff0c;我們為OS 7帶來了一些意外驚喜&#xff0c;包括GNOME應用的新版本和郵件應用的重大更新。Wayland也來了&#xff0c;我們有了一種新的方式來管理驅動程序&#xff0c;并且我們現在默認…

PS去水印

去除圖片水印 step1&#xff1a;使用套索工具框選圖片水印 step2&#xff1a;CTRLshiftU 去色 step3&#xff1a;CTRLL 色階 step4&#xff1a;使用第三根吸管去點擊需要去掉的圖片水印 成功去掉 去掉文字水印 也可按照上述方法去除

計算機網絡 期末復習(謝希仁版本)第1章

大眾熟知的三大網絡&#xff1a;電信網絡、有線電視網絡、計算機網絡。發展最快起到核心的是計算機網絡。Internet是全球最大、最重要的計算機網絡。互聯網&#xff1a;流行最廣、事實上的標準譯名。互連網&#xff1a;把許多網絡通過一些路由器連接在一起。與網絡相連的計算機…

【多模態】35、TinyLLaVA | 3.1B 的 LMM 模型就可以實現 7B LMM 模型的效果

文章目錄 一、背景二、方法2.1 模型結構2.2 訓練 pipeline 三、模型設置3.1 模型結構3.2 訓練數據3.3 訓練策略3.4 評測 benchmark 四、效果 論文&#xff1a;TinyLLaVA: A Framework of Small-scale Large Multimodal Models 代碼&#xff1a;https://github.com/TinyLLaVA/T…

AcWing 842. 排列數字——算法基礎課題解

AcWing 842. 排列數字 題目描述 給定一個整數 &#x1d45b;&#xff0c;將數字 1~&#x1d45b; 排成一排&#xff0c;將會有很多種排列方法。 現在&#xff0c;請你按照字典序將所有的排列方法輸出。 輸入格式 共一行&#xff0c;包含一個整數 &#x1d45b;。 輸出格…

【Unity性能優化】使用多邊形碰撞器網格太多,性能消耗太大了怎么辦

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 專欄交流&#x1f9e7;&…

【機器學習基礎】Python編程04:五個實用練習題的解析與總結

Python是一種廣泛使用的高級編程語言,它在機器學習領域中的重要性主要體現在以下幾個方面: 簡潔易學:Python語法簡潔清晰,易于學習,使得初學者能夠快速上手機器學習項目。 豐富的庫支持:Python擁有大量的機器學習庫,如scikit-learn、TensorFlow、Keras和PyTorch等,這些…

一道java線程池面試題

線程池面試題 一個線程池的核心線程數為10個&#xff0c;最大線程數為20個&#xff0c;阻塞隊列的容量為30。現在提交45個 任務&#xff0c;每個任務的耗時為500毫秒。 請問&#xff1a;這批任務執行完成總共創建幾個線程&#xff1f; 請問&#xff1a;這批任務執行完成總計需…

快團團有貨源的供貨大團長如何給單個訂單發貨?

快團團團長給單個訂單發貨的步驟如下&#xff1a; 登錄快團團商家后臺&#xff1a;首先&#xff0c;你需要以團長的身份登錄快團團的商家后臺管理系統。 進入訂單管理頁面&#xff1a;登錄后&#xff0c;在后臺導航中找到并點擊“訂單管理”或類似的選項&#xff0c;進入訂單列…

C語言中的#和##操作符用法

C語言中#和##操作符用法 答&#xff1a;在C語言中&#xff0c;#和##是預處理器&#xff08;preprocessor&#xff09;的操作符&#xff0c;主要用于宏&#xff08;macro&#xff09;的定義中。這兩個操作符提供了字符串化和字符串連接的功能。 #操作符 #操作符用于將其后的宏…

算法人生(19): 從“LangChain的六大組件”看“個人職業規劃”

我們今天要說說和大模型有著密切關系的Langchain &#xff0c;它提供了一個平臺&#xff0c;讓開發者可以更加輕松地訓練、部署和管理這些大模型。具體來說&#xff0c;Langchain 可以通過提供高性能的計算資源、靈活的模型管理和部署選項、以及豐富的監控和調試功能&#xff0…

Python語言試卷:深入剖析Python編程的精髓

Python語言試卷&#xff1a;深入剖析Python編程的精髓 在編程的世界里&#xff0c;Python以其簡潔、易讀和強大的功能贏得了眾多開發者的青睞。為了全面檢驗大家對Python語言的理解程度&#xff0c;本試卷將從四個方面、五個方面、六個方面和七個方面展開深入剖析&#xff0c;…

企業軟件產品和服務 之 設計保證安全 七項承諾

1. 引言 公司如何保護自己免受數據泄露的影響&#xff1f;標準答案就是&#xff1a; “啟用多因素身份驗證”——MTA&#xff08;Enable multifactor authentication&#xff09;。 但是&#xff0c;目前很多公司仍然盲目地只使用密碼作為唯一的身份來源。 網絡安全的核心是…

Python怎么定義類:深入探索與實戰解析

Python怎么定義類&#xff1a;深入探索與實戰解析 在Python編程的廣闊天地中&#xff0c;定義類是一項基礎且至關重要的技能。類作為面向對象編程的核心構造&#xff0c;為我們提供了一種組織和封裝代碼、創建可重用對象的方式。今天&#xff0c;我們將從四個方面、五個方面、…

【分享】兩種方法設置PDF“打開密碼”

想要保護PDF文件的私密性&#xff0c;只允許特定人查看&#xff0c;我們可以給PDF設置“打開密碼”&#xff0c;這樣只有知道密碼的人才可以打開文件。如果小伙伴們不知道如何設置&#xff0c;就一起看看以下兩種方法吧&#xff01; 方法1&#xff1a;使用PDF編輯器 大部分PD…