日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue表单类的父子组件数据传递示例_vue.js_脚本之家

發(fā)布時(shí)間:2023/12/10 vue 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue表单类的父子组件数据传递示例_vue.js_脚本之家 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Vue.js進(jìn)行項(xiàng)目開發(fā),那必然會使用基于組件的開發(fā)方式,這種方式的確給開發(fā)和維護(hù)帶來的一定的便利性,但如果涉及到組件之間的數(shù)據(jù)與狀態(tài)傳遞交互,就是一件麻煩事了,特別是面對有一大堆表單的頁面。

在這里記錄一下我平時(shí)常用的處理方式,這篇文章主要記錄父子組件間的數(shù)據(jù)傳遞,非父子組件主要通過Vuex處理,這篇文章暫時(shí)不作說明。

與文檔里給的方案一樣,父組件向子組件傳遞數(shù)據(jù)主要通過 props,子組件向父組件傳遞數(shù)據(jù)主要通過觸發(fā)器 $emit(),只是在用法上會有些不同。

1、傳遞基本類型數(shù)據(jù)

當(dāng)子組件內(nèi)容較少時(shí),會直接傳遞基本類型數(shù)據(jù),通常為String, Number, Boolean三種。

先看個(gè)例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<!-- 父組件 parent.vue -->

?

<template>

??<div class="parent">

????<h3>問卷調(diào)查</h3>

????<child v-model="form.name"></child>

????<div class="">

??????<p>姓名:{{form.name}}</p>

????</div>

??</div>

</template>

?

<script>

??import child from './child.vue'

?

??export default {

????components: {

??????child

????},

????data () {

??????return {

????????form: {

??????????name: '請輸入姓名'

????????}

??????}

????}

??}

</script>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<!-- 子組件 child.vue -->

?

<template>

??<div class="child">

????<label>

??????姓名:<input type="text" :value="currentValue" @input="changeName">

????</label>

??</div>

</template>

?

<script>

??export default {

????props: {

??????// 這個(gè) prop 屬性必須是 valule,因?yàn)?v-model 展開所 v-bind 的就是 value

??????value: ''

????},

????methods: {

??????changeName (e) {

????????// 給input元素的 input 事件綁定一個(gè)方法 changeName

????????// 每次執(zhí)行這個(gè)方法的時(shí)候都會觸發(fā)自定義事件 input,并且把輸入框的值傳遞進(jìn)去。

????????this.$emit('input', e.target.value)

??????}

????}

??}

</script>

給子組件的 input 事件綁定一個(gè)方法 changeName,每次執(zhí)行這個(gè)方法的時(shí)候都會觸發(fā)自定義事件 input,并且把輸入框的值傳遞進(jìn)去。

父組件通過 v-model 指令綁定一個(gè)值,來接收子組件傳遞過來的數(shù)據(jù)。但這樣只是父組件響應(yīng)子組件的數(shù)據(jù),如果還要子組件響應(yīng)父組件傳遞的數(shù)據(jù),就需要給子組件定義一個(gè)props屬性 value,并且這個(gè)屬性必須是 value,不能寫個(gè)其它單詞。

v-model 其實(shí)就是一個(gè)語法糖,詳情可以參考使用自定義事件的表單輸入組件。

2、傳遞引用類型數(shù)據(jù)

當(dāng)子組件里的內(nèi)容比較多時(shí),比如子組件有多個(gè)表單元素,如果還像上面那樣給每個(gè)表單元素綁定值,那就要寫很多重復(fù)代碼了。所以這個(gè)時(shí)候通常傳遞的是一個(gè)對象,傳值的基本原理不變,不過寫法上會有些不同。

還是先看代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<!-- 父組件 parent.vue -->

?

<template>

??<div class="parent">

????<h3>問卷調(diào)查</h3>

????<child :formData.sync="form"></child>

????<div class="">

??????<p>姓名:{{form.name}}</p>

????</div>

??</div>

</template>

?

<script>

??import child from './child.vue'

?

??export default {

????components: {

??????child

????},

????data () {

??????return {

????????form: {

??????????name: '請輸入姓名',

??????????age: '21'

????????}

??????}

????}

??}

</script>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<!-- 子組件 child.vue -->

?

<template>

??<div class="child">

????<label>

??????姓名:<input type="text" v-model="form.name">

????</label>

????<label>

??????年齡:<input type="text" v-model="form.age">

????</label>

????<label>

??????地點(diǎn):<input type="text" v-model="form.address">

????</label>

??</div>

</template>

?

<script>

??export default {

????data () {

??????return {

????????form: {

??????????name: '',

??????????age: '',

??????????address: ''

????????}

??????}

????},

????props: {

??????// 這個(gè) prop 屬性接收父組件傳遞進(jìn)來的值

??????formData: Object

????},

????watch: {

??????// 因?yàn)椴荒苤苯有薷?props 里的屬性,所以不能直接把 formData 通過v-model進(jìn)行綁定

??????// 在這里我們需要監(jiān)聽 formData,當(dāng)它發(fā)生變化時(shí),立即將值賦給 data 里的 form

??????formData: {

????????immediate: true,

????????handler (val) {

??????????this.form = val

????????}

??????}

????},

????mounted () {

??????// props 是單向數(shù)據(jù)流,通過觸發(fā) update 事件綁定 formData,

??????// 將 data 里的 form 指向父組件通過 formData 綁定的那個(gè)對象

??????// 父組件在綁定 formData 的時(shí)候,需要加上 .sync

??????this.$emit('update:formData', this.form)

????}

??}

</script>

props 是單向數(shù)據(jù)流,當(dāng)我們需要對 props 內(nèi)的屬性進(jìn)行雙向綁定時(shí),就需要用到.sync 修飾符,詳情請參考.sync 修飾符,這里不做贅述。

這里需要注意的是,vue 中是不能直接修改 props 的,所以如果我們要向父組件傳值,還是需要通過修改 data 里的值,prop 只是作為父子之間通話的中間人存在。

另外,如果我們想要預(yù)覽父組件最開始傳的數(shù)據(jù),就需要通過 watch 監(jiān)聽 prop 的變化,在子組件初始化的時(shí)候就把值傳進(jìn)去。

注意:?我在子組件里把 this.$emit('update:formData', this.form) 放在 mounted 當(dāng)中的,其原因是為了避免在每個(gè) input 標(biāo)簽的 input 事件中觸發(fā)自定義事件,但這樣寫的前提是,父子組件都要共用一個(gè)對象。

這也就是上面代碼中,父組件中使用 :formData.sync="form" 綁定值時(shí),form 是一個(gè)對象,而子組件中的觸發(fā)自定義事件 this.$emit('update:formData', this.form) ,this.form 也得是一個(gè)對象。

這里還需要注意的是,如果有多個(gè)子組件使用一個(gè)對象,那就要避免這種寫法,因?yàn)橐粋€(gè)組件修改了這個(gè)對象的數(shù)據(jù),那么其它子組件也就都跟著改變了。

所以我在用的時(shí)候都是給每個(gè)子組件分配了一個(gè)自己的對象,比如:

1

2

3

4

5

6

7

8

data () {

?return {

??parentObject: {

???child_1_obj: {},

???child_2_obj: {},

??}

?}

}

這是在父組件里定義的數(shù)據(jù),當(dāng)然名字不會這樣取了。

結(jié)尾

也沒什么說的了,對 Vue 還是處于使用的階段,對其底層的東西了解還不夠,我也好想讀讀源碼,但總只是想想.....大家覺得有什么不妥的地方盡管說,大家相互交流交流。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Vue表单类的父子组件数据传递示例_vue.js_脚本之家的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆精品在线 | 日韩免费成人av | 天天摸夜夜操 | 色婷婷综合久久久久中文字幕 | 富婆如狼似虎找黑人老外 | 成年人在线观看网站 | 操操操干干干 | 调教女m荡骚贱淫故事 | 成人av观看 | 狂野欧美性猛交xxxxhd | 高清av网 | 精品久久久久一区二区国产 | 日本黄色片免费看 | 九色porn蝌蚪 | 欧美激情视频在线 | 国产精品91视频 | 亚洲天堂成人在线 | 人妻体内射精一区二区 | 日韩一区二区三区在线看 | 91av在线视频播放 | 欧美激情第1页 | 在线观看a视频 | 91日韩在线视频 | 黄色动漫免费在线观看 | 天天干夜夜欢 | 国产精品高潮呻吟久久久 | a网址| 精品久久久久一区二区 | 免费人妻一区二区三区 | 色视频在线观看免费 | a天堂在线观看视频 | 久久社区视频 | 无码乱人伦一区二区亚洲 | 激情综合五月网 | 欧美啊v| 亚洲精品综合在线观看 | 波多野结衣一区二区三区免费视频 | 欧美一级在线视频 | 国产一区亚洲二区三区 | 手机在线看永久av片免费 | 国产传媒视频在线观看 | 中文人妻av久久人妻18 | 日韩性网 | 精品欧美黑人一区二区三区 | 99人妻少妇精品视频一区 | 在线午夜电影 | 欧美黄片一区二区三区 | av在线视 | 伊人超碰在线 | 国语对白永久免费 | 免费级毛片 | 日本成人黄色 | 久久婷综合 | 修女也疯狂3免费观看完整版 | 中文在线最新版天堂8 | 最近2019中文字幕大全第二页 | 国产精品一区二区性色av | 国产 日韩 欧美在线 | 中文字幕123| 欧美日韩精品在线视频 | 精品亚洲aⅴ无码一区二区三区 | 91精品视频网站 | 超碰天天| 欧美大尺度床戏做爰 | 日本免费中文字幕 | 欧美熟妇一区二区 | 小早川怜子一区二区三区 | 国产露脸国语对白在线 | 一级特黄色大片 | 寡妇激情做爰呻吟 | 日本狠狠操 | 黄网站免费大全入口 | 国产精品13p| www.超碰在线 | 国产做爰xxxⅹ久久久精华液 | 综合久久久久久久久久久 | 国产内射一区二区 | 精品视频在线免费看 | 国产一区二区99 | 亚洲人成人一区二区在线观看 | 在线不卡一区二区 | 日美女逼逼 | 强开小嫩苞一区二区三区网站 | 免费v片在线观看 | 5566在线| 欧美在线看 | 91精品视频一区二区三区 | 91丨九色丨国产 | 欧美另类第一页 | 一区二区黄色片 | 日韩欧美一区二区三区久久婷婷 | 成人免费福利 | 日本大尺度激情做爰hd | 国产69av| 国产精品51 | 女性裸体视频网站 | 中文字幕黄色av | 欧美bdsm调教视频 | 99久久久国产精品免费蜜臀 |