自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Vue組件化之父子組件傳值

開發(fā) 前端
父子組件傳值,兄弟之間傳值場景小編這里還沒有遇到,所以本次就以常用的父子組件傳值來結(jié)合例子說一下!

一、前言

作為國內(nèi)使用較多的前端框架——Vue,作為一名開發(fā)人員是必須要掌握的,小編作為一名后端人員。由于公司前端人員不足,也是學(xué)起來了Vue!

框架的精髓就在于,組件化!

一個頁面拆分幾個小組件,這就牽扯到組件之間的數(shù)據(jù)傳輸問題!

比較常用的就是:父子組件傳值,兄弟之間傳值場景小編這里還沒有遇到,所以本次就以常用的父子組件傳值來結(jié)合例子說一下!

二、組件化優(yōu)點(diǎn)

Vue組件化的優(yōu)點(diǎn)主要有以下幾個方面:

  1. 更好的代碼復(fù)用性
    通過組件化的方式,將功能拆分為不同的模塊,每個模塊具有單一的職責(zé),實(shí)現(xiàn)了代碼的分離和應(yīng)用的解耦。這樣,一個組件可以在多個頁面中復(fù)用,減少了代碼的重復(fù)編寫,提高了開發(fā)效率。
  2. 更易于進(jìn)行分工合作
    通過組件化的方式,不同的開發(fā)者可以負(fù)責(zé)不同公共組件的開發(fā),有利于項(xiàng)目的分工合作。每個開發(fā)者只需要關(guān)注自己負(fù)責(zé)的組件的開發(fā)工作,不會干擾到其他組件開發(fā)者的工作,提高了項(xiàng)目的開發(fā)效率和質(zhì)量。
  3. 更易于維護(hù)和升級
    Vue組件化可以讓開發(fā)者更加專注于每個組件的功能,從而更方便地對代碼進(jìn)行維護(hù)和升級。如果在系統(tǒng)中要更換某個功能,只需升級其中的一個組件,而不需要更改其他組件。
  4. 更好的靈活性和可復(fù)用性
    Vue組件化能帶來更好的靈活性,通過組合不同的組件可以快速搭建出新的頁面,這樣即使項(xiàng)目需求變更,也能通過復(fù)用已有的組件來快速實(shí)現(xiàn)新的功能。
  5. 更直觀的數(shù)據(jù)流
    由于Vue數(shù)據(jù)流的單向流動方式,讓我們更容易追蹤數(shù)據(jù)的變化,從而更好地管理數(shù)據(jù)狀態(tài)。通過組件的props$emit交互,讓數(shù)據(jù)的傳遞具有一定的規(guī)范和限制,減少了代碼耦合度。

總之,Vue組件化能夠帶來更好的代碼復(fù)用性、易于維護(hù)和升級、靈活性、直觀的數(shù)據(jù)流和分工合作,是現(xiàn)代Web開發(fā)的必然選擇。

三、實(shí)戰(zhàn)

在Vue中,父子組件傳值的方式有很多種,本文介紹其中比較常用的兩種方式:props和?

1、App.vue

在根容器中展示我們的父組件!

<template>
<div id="app">
<ParentComponent></ParentComponent>
</div>
</template>

<script>
import ParentComponent from "@/views/ParentComponent";

export default {
name: 'App',
components: {
ParentComponent,
}
}
</script>

<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

2、ParentComponent.vue

這是父容器:

components: { ChildComponent }:父組件中引入并注冊子組件,這樣才能在父組件的模板中使用。

:message="message":父組件的message數(shù)據(jù)傳遞到子組件中,需要使用v-bind或者簡寫的":"來將數(shù)據(jù)綁定到子組件標(biāo)簽上

@updateNum="updateNum":子組件向父組件傳遞一個自定義事件,父組件可以監(jiān)聽這個事件并接收傳遞過來的數(shù)據(jù)

<template>
<div>
<h1>這是子組件傳過來的num數(shù)據(jù): {{ num }}</h1>
<ChildComponent :message="message" @updateNum="updateNum"></ChildComponent>
</div>
</template>

<script>
import ChildComponent from "@/components/ChildComponent";

export default {
name: "ParentComponent",
components: {
ChildComponent
},
data () {
return {
name: 'Vue.js',
message: '我是父組件的message',
num:0,
}
},

methods: {
updateNum (newNum) {
this.num = newNum
},
}
}
</script>

<style scoped>

</style>

3、ChildComponent.vue

這是子組件:

子組件使用:props來接收數(shù)據(jù),變量名稱直接可以使用

有一些參數(shù)可以根據(jù)自己要求添加:

this.$emit('updateNum', this.num):子組件可以通過$emit方法來發(fā)布一個自定義事件,父組件可以監(jiān)聽這個事件并接收傳遞過來的數(shù)據(jù),可以不傳值!?

關(guān)鍵字


解釋

type

String

數(shù)據(jù)類型:String、Number、Boolean、Array、Object、Date、Function、Symbol

default

'這是默認(rèn)值'

如果不傳值,默認(rèn)值

required

true

是否必填

子組件可以通過emit方法來發(fā)布一個自定義事件,父組件可以監(jiān)聽這個事件并接收傳遞過來的數(shù)據(jù),可以不傳值!

第一個參數(shù)一定要和父組件的事件名稱一致??!

<template>
<div class="box">
<p>這是父傳過來的數(shù)據(jù):{{ message }}</p>
<button @click="updateParentNum">點(diǎn)擊+1</button>
</div>
</template>

<script>
export default {
name: "ChildComponent",
props: {
message: {
type: String,
default: '默認(rèn)值',
required: true
},
},

data () {
return {
newMessage: '我是子組件的數(shù)據(jù)',
num: 0
}
},

methods: {
updateParentNum () {
this.num = ++ this.num
// 可以有值,可以不傳遞值
this.$emit('updateNum', this.num)
}
}
}
</script>

<style scoped>
.box{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 300px;
background-color: pink;
}
</style>

4、效果

父組件的message的值會傳遞給子組件,并在子組件展示。

每次點(diǎn)擊子組件的+1就會向父組件發(fā)布事件并把num傳遞給父組件。

圖片

四、總結(jié)

從上述兩種方式可以看出,props傳值需要在子組件中預(yù)先定義需要接收的屬性,在父組件中傳遞數(shù)據(jù)時(shí)需要使用v-bind或者":"進(jìn)行綁定。而$emit向父組件傳值則需要在子組件中發(fā)布自定義事件,父組件中需要監(jiān)聽這個事件并在事件處理函數(shù)中獲取傳遞過來的數(shù)據(jù)。

在實(shí)際開發(fā)中,我們需要根據(jù)具體的場景來選擇使用哪種方式進(jìn)行父子組件之間的數(shù)據(jù)傳遞,以便讓我們的代碼更加簡潔、高效、穩(wěn)定。

責(zé)任編輯:姜華 來源: 小王博客基地
相關(guān)推薦

2021-09-15 08:09:43

前端技術(shù)編程

2024-01-09 08:34:56

Vue3.js組件通信

2020-09-12 16:22:27

Vue

2022-07-27 08:40:06

父子組件VUE3

2021-09-13 09:20:20

前端框架VUE

2019-05-29 14:23:53

Vue.js組件通信

2023-08-07 08:52:53

Vue組件Props 命名

2022-11-29 08:45:44

Vue 3UI 組件庫

2021-05-18 07:51:37

Suspense組件Vue3

2022-04-26 05:55:06

Vue.js異步組件

2017-01-19 18:58:11

iOS組件化方案

2017-07-25 08:54:26

前端JsxVue

2022-10-19 15:28:32

軟件系統(tǒng)應(yīng)用程序

2021-12-09 08:49:14

Vue 3 Provide Inject

2021-08-01 07:58:58

Vue 加載組件

2017-07-11 18:00:21

vue.js數(shù)據(jù)組件

2020-02-21 11:08:24

瀏覽器HTML設(shè)計(jì)

2021-09-29 11:33:19

異步組件Vue 3

2021-02-22 21:49:33

Vue動態(tài)組件

2022-08-09 11:46:58

Vue遞歸組件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號