成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

vue組件怎么傳值

傳值方法:1、利用props實(shí)現(xiàn)父傳子;2、子傳父,需要自定義事件,在子組件中用“this.$emit(‘事件名’)”觸發(fā),而父中用“@事件名”監(jiān)聽;3、兄弟間,通過公有父元素作為橋接,結(jié)合父子props傳參、子父自定義事件;4、用路由傳值;5、用$ref傳值;6、用依賴注入傳給后代子孫曾孫;7、利用$attrs;8、借助$listeners中間事件;9、用$parent傳等。

vue組件怎么傳值

本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

本篇文章帶大家聊聊vue組件傳值的10種方式,常用的也有五六種,先上一張總結(jié)圖:

vue組件怎么傳值

1、父組件傳給子組件

在子組件里定義一個props,即props:[‘msg’],msg可以是對象也可以是基本數(shù)據(jù)類型

如果你想定義一個默認(rèn)值,即 props:{msg: {type: String, default: ‘hello world’}},
若默認(rèn)值是對象類型:props: { msg: { type: Object, default: () => { return { name: ‘dan_seek’ } } }}

需要注意的是這種傳值是單向的,你無法改變父組件的值(當(dāng)然引用類型例外);而且如果直接修改props的值會報一個警告。

推薦的寫法是在data()里重新定義一個變量(見Children.vue),并把props賦值給它,當(dāng)然計(jì)算屬性也行。

Children.vue

<template>     <section>         父組件傳過來的消息是:{{myMsg}}     </section> </template>  <script>     export default {         name: "Children",         components: {},         props:['msg'],         data() {             return {                 myMsg:this.msg             }         },         methods: {}     } </script>
登錄后復(fù)制

Parent.vue

<template>   <div class="parent">     <Children :msg="message"></Children>   </div> </template>  <script> import Children from '../components/Children'  export default {   name: 'Parent',   components: {       Children   },   data() {       return {           message:'hello world' } }, } </script>
登錄后復(fù)制

2、子組件傳給父組件

這里需要使用自定義事件,在子組件中使用this.$emit(‘myEvent’) 觸發(fā),然后在父組件中使用@myEvent監(jiān)聽

Children.vue

<template>     <div class="parent">         這里是計(jì)數(shù):{{parentNum}}         <Children-Com @addNum="getNum"></Children-Com>     </div> </template>  <script>     import ChildrenCom from '../components/Children'      export default {         name: 'Parent',         components: {             ChildrenCom         },         data() {             return {                 parentNum: 0             }         },         methods:{             // childNum是由子組件傳入的             getNum(childNum){                 this.parentNum = childNum             }         }     } </script>
登錄后復(fù)制

Parent.vue

<template>     <div class="parent">         這里是計(jì)數(shù):{{parentNum}}         <Children-Com @addNum="getNum"></Children-Com>     </div></template><script>     import ChildrenCom from '../components/Children'      export default {         name: 'Parent',         components: {             ChildrenCom        },         data() {             return {                 parentNum: 0             }         },         methods:{             // childNum是由子組件傳入的             getNum(childNum){                 this.parentNum = childNum            }         }     }</script>
登錄后復(fù)制

3、兄弟組件間傳值

運(yùn)用自定義事件emit的觸發(fā)和監(jiān)聽能力,定義一個公共的事件總線eventBus,通過它作為中間橋梁,我們就可以傳值給任意組件了。而且通過eventBus的使用,可以加深emit的理解。

EventBus.js

import Vue from 'vue' export default new Vue()
登錄后復(fù)制

Children1.vue

<template>     <section>         <div @click="pushMsg">push message</div>         <br>     </section> </template>  <script>     import eventBus from './EventBus'     export default {         name: "Children1",         components: {},         data() {             return {                 childNum:0             }         },         methods: {             pushMsg(){             	// 通過事件總線發(fā)送消息                 eventBus.$emit('pushMsg',this.childNum++)             }         }     } </script>
登錄后復(fù)制

Children2.vue

<template>     <section>         children1傳過來的消息:{{msg}}     </section> </template>  <script>     import eventBus from './EventBus'      export default {         name: "Children2",         components: {},         data() {             return {                 msg: ''             }         },         mounted() {         	// 通過事件總線監(jiān)聽消息             eventBus.$on('pushMsg', (children1Msg) => {                 this.msg = children1Msg             })         }     } </script>
登錄后復(fù)制

Parent.vue

<template>     <div class="parent">         <Children1></Children1>         <Children2></Children2>     </div> </template>  <script>     import Children1 from '../components/Children1'     import Children2 from '../components/Children2'      export default {         name: 'Parent',         components: {             Children1,             Children2         },         data() {             return {             }         },         methods:{         }     } </script>
登錄后復(fù)制

github上還有一個開源vue-bus庫,可以參考下: https://github.com/yangmingshan/vue-bus#readme

4、路由間傳值

i.使用問號傳值

A頁面跳轉(zhuǎn)B頁面時使用 this.$router.push(‘/B?name=danseek’)

B頁面可以使用 this.$route.query.name 來獲取A頁面?zhèn)鬟^來的值

上面要注意router和route的區(qū)別

ii.使用冒號傳值

配置如下路由:

{     path: '/b/:name',     name: 'b',     component: () => import( '../views/B.vue')   },
登錄后復(fù)制

在B頁面可以通過 this.$route.params.name 來獲取路由傳入的name的值

iii.使用父子組件傳值

由于router-view本身也是一個組件,所以我們也可以使用父子組件傳值方式傳值,然后在對應(yīng)的子頁面里加上props,因?yàn)閠ype更新后沒有刷新路由,所以不能直接在子頁面的mounted鉤子里直接獲取最新type的值,而要使用watch。

<router-view :type="type"></router-view>
登錄后復(fù)制

// 子頁面 ...... props: ['type'] ...... watch: {             type(){                 // console.log("在這個方法可以時刻獲取最新的數(shù)據(jù):type=",this.type)             },         },
登錄后復(fù)制

5、使用$ref傳值

通過$ref的能力,給子組件定義一個ID,父組件通過這個ID可以直接訪問子組件里面的方法和屬性

首先定義一個子組件Children.vue

<template>     <section>         傳過來的消息:{{msg}}     </section> </template>  <script>     export default {         name: "Children",         components: {},         data() {             return {                 msg: '',                 desc:'The use of ref'             }         },         methods:{             // 父組件可以調(diào)用這個方法傳入msg             updateMsg(msg){                 this.msg = msg             }         },     } </script>
登錄后復(fù)制

然后在父組件Parent.vue中引用Children.vue,并定義ref屬性

<template>     <div class="parent">         <!-- 給子組件設(shè)置一個ID ref="children" -->         <Children ref="children"></Children>         <div @click="pushMsg">push message</div>     </div> </template>  <script>     import Children from '../components/Children'      export default {         name: 'parent',         components: {             Children,         },         methods:{             pushMsg(){                 // 通過這個ID可以訪問子組件的方法                 this.$refs.children.updateMsg('Have you received the clothes?')                 // 也可以訪問子組件的屬性                 console.log('children props:',this.$refs.children.desc)             }         },     } </script>
登錄后復(fù)制

6、使用依賴注入傳給后代子孫曾孫

假設(shè)父組件有一個方法 getName(),需要把它提供給所有的后代

provide: function () {   return {     getName: this.getName()   } }
登錄后復(fù)制

provide 選項(xiàng)允許我們指定我們想要提供給后代組件的數(shù)據(jù)/方法

然后在任何后代組件里,我們都可以使用 inject 來給當(dāng)前實(shí)例注入父組件的數(shù)據(jù)/方法:

inject: ['getName']
登錄后復(fù)制

Parent.vue

<template>     <div class="parent">         <Children></Children>     </div> </template>  <script>     import Children from '../components/Children'      export default {         name: 'Parent',         components: {             Children,         },         data() {             return {                 name:'dan_seek'             }         },         provide: function () {             return {                 getName: this.name             }         },     } </script>
登錄后復(fù)制

Children.vue

<template>     <section>         父組件傳入的值:{{getName}}     </section> </template>  <script>     export default {         name: "Children",         components: {},         data() {             return {             }         },         inject: ['getName'],     } </script>
登錄后復(fù)制

7、祖?zhèn)鲗O $attrs

正常情況下需要借助父親的props作為中間過渡,但是這樣在父親組件就會多了一些跟父組件業(yè)務(wù)無關(guān)的屬性,耦合度高,借助$attrs可以簡化些,而且祖跟孫都無需做修改

GrandParent.vue

<template>     <section>         <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>     </section> </template>  <script>     import Parent from './Parent'     export default {         name: "GrandParent",         components: {           Parent         },         data() {             return {}         },         methods: {           sayKnow(val){             console.log(val)           }         },         mounted() {         }     } </script>
登錄后復(fù)制

Parent.vue

<template>   <section>     <p>父組件收到</p>     <p>祖父的名字:{{name}}</p>     <children v-bind="$attrs" v-on="$listeners"></children>   </section> </template>  <script>   import Children from './Children'    export default {     name: "Parent",     components: {       Children     },     // 父組件接收了name,所以name值是不會傳到子組件的     props:['name'],     data() {       return {}     },     methods: {},     mounted() {     }   } </script>
登錄后復(fù)制

Children.vue

<template>   <section>     <p>子組件收到</p>     <p>祖父的名字:{{name}}</p>     <p>祖父的性別:{{sex}}</p>     <p>祖父的年齡:{{age}}</p>     <p>祖父的愛好:{{hobby}}</p>      <button @click="sayKnow">我知道啦</button>   </section> </template>  <script>   export default {     name: "Children",     components: {},     // 由于父組件已經(jīng)接收了name屬性,所以name不會傳到子組件了     props:['sex','age','hobby','name'],     data() {       return {}     },     methods: {       sayKnow(){         this.$emit('sayKnow','我知道啦')       }     },     mounted() {     }   } </script>
登錄后復(fù)制

顯示結(jié)果

父組件收到 祖父的名字:grandParent 子組件收到 祖父的名字: 祖父的性別:男 祖父的年齡:88 祖父的愛好:code
登錄后復(fù)制

8、孫傳祖

借助$listeners中間事件,孫可以方便的通知祖,代碼示例見7

9、$parent

通過parent可以獲父組件實(shí)例,然后通過這個實(shí)例就可以訪問父組件的屬性和方法,它還有一個兄弟root,可以獲取根組件實(shí)例。

語法:

// 獲父組件的數(shù)據(jù) this.$parent.foo  // 寫入父組件的數(shù)據(jù) this.$parent.foo = 2  // 訪問父組件的計(jì)算屬性 this.$parent.bar  // 調(diào)用父組件的方法 this.$parent.baz()
登錄后復(fù)制

于是,在子組件傳給父組件例子中,可以使用this.$parent.getNum(100)傳值給父組件。

10、sessionStorage傳值

sessionStorage 是瀏覽器的全局對象,存在它里面的數(shù)據(jù)會在頁面關(guān)閉時清除 。運(yùn)用這個特性,我們可以在所有頁面共享一份數(shù)據(jù)。

語法:

// 保存數(shù)據(jù)到 sessionStorage sessionStorage.setItem('key', 'value');  // 從 sessionStorage 獲取數(shù)據(jù) let data = sessionStorage.getItem('key');  // 從 sessionStorage 刪除保存的數(shù)據(jù) sessionStorage.removeItem('key');  // 從 sessionStorage 刪除所有保存的數(shù)據(jù) sessionStorage.clear();
登錄后復(fù)制

注意:里面存的是鍵值對,只能是字符串類型,如果要存對象的話,需要使用 let objStr = JSON.stringify(obj) 轉(zhuǎn)成字符串然后再存儲(使用的時候 let obj = JSON.parse(objStr) 解析為對象)。

這樣存對象是不是很麻煩呢,推薦一個庫 good-storage ,它封裝了sessionStorage ,可以直接用它的API存對象

// localStorage  storage.set(key,val)   storage.get(key, def)    // sessionStorage  storage.session.set(key, val)  storage.session.get(key, val)
登錄后復(fù)制

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
一本一道波多野结衣AV中文| 久久久精品人妻无码专区不卡| 国产精品久久这里只有精品| 国产男女猛烈无遮挡免费视频| 韩国的无码AV看免费大片在线| 久久99精品久久久久久9蜜桃| 看成年女人午夜毛片免费| 男人一生最吉利的网名| 日本插槽X8插槽怎么用| 婷婷色综合AⅤ视频| 亚洲AV综合色一区二区三区| 亚洲欲色欲色XXXXX在线观看| 2020国产精品永久在线| IPHONE欧美高清18| 国产AV成人精品播放| 黑人巨大精品人妻一区二区| 麻豆精品一区综合AV在线| 人妻夜夜爽一区二区三区| 玩弄少妇高耸白嫩的乳峰A片小说| 亚洲AV永久无码精品另类稀缺 | 三个人换着躁B一PL| 日韩内射美女片在线观看网站| 欧美极品JIZZHD欧美| 天天摸天天做天天爽水多| 人妻AⅤ中文字幕| 无码人妻丰满熟妇区五十路| 无码人妻品一区二区三区精99| 女主快穿到各个世界做小三| 女人被弄到高潮的免费视频APP| 色婷婷一区二区三区四区成人网| 西欧FREE性满足HD| 在线精品亚洲观看不卡欧| 青青草无码精品伊人久久7| 精品无码中文字幕不卡| 欧美精品视频一区二区| 无码成人AAAAA毛片| 一面膜上边一面膜下边日本| 波多野结衣无内裤护士| 韩国无码AV片在线观看| 欧美丰满熟妇XXXXX高潮| 推高她的裙子挺身而入| 一区蜜桃中文不卡在线| 丰满圆润大胸在线| 久久精品香蕉绿巨人登场| 日韩AⅤ无码AV一区二区三区 | 亚洲一卡一卡二新区无人区| 被窝影院午夜无码国产| 狠狠色噜噜狠狠狠狠97俺也去| 欧妇女乱妇女乱视频| 亚洲AV成人一区二区三区网站 | 好大好湿好硬顶到了好爽视频| 欧美精品一区二区三区人妻久久久| 五月色综合无码一区二区三区 | 末成年女A∨片一区二区| 婷婷久久综合九色综合绿巨人| 岳女二人名器共侍一夫的出处| 高清色惰WWW日本午夜色视频| 久久亚洲色WWW成人男男| 调教后把奶头拴在跑步机上虐| 长腿校花无力呻吟娇喘| 国产无人区卡一卡二卡乱码| 欧美另类AV重囗味| 亚洲乱码无人区卡1卡2卡3| 高潮VPSWINDOWS国产乱| 美女裸露双奶头光屁股无遮挡直播| 无码一区二区三区亚洲人妻| ASS十三小美女ASSPICS| 精品久久久久中文字幕日本 | 美女用香蕉练口活视频| 护士HD老师FREE性ⅩⅩⅩ| 久久亚洲精品无码AV大香| 久久成人麻豆午夜电影| 视频二区 爆乳 丰满 熟女| 在线天堂资源WWW在线中文| 国产精品久久久久久久久KTV| 欧美精品少妇XXXXⅩ另类| 亚洲一线产区二线产区分布图片| 国产极品美女高潮无套在线观看 | 国产又大又粗又黄又爽白丝| 久久综合久久鬼色| 日本少妇自慰免费完整版| 日韩精品无码一区二区三区不卡| 亚洲成亚洲乱码一二三四区软件| 夜夜添夜夜添夜夜摸夜夜摸| 麻豆国产果冻自制传媒| 秋霞国产午夜伦午夜福利片| 欧美日韩成人在线播放| 亚洲AV成人网站| 成年女人天堂香蕉网| 日本最新免费二区| 亚洲色欲综合一区二区三区| 18禁裸乳啪啪无遮裆网站| 精产一二三产区区别在哪| 雯雅婷在工地被民工玩| 成人国产精品一区二区免费| 欧美大屁股流白浆XXXX视频| 一二三四免费观看视频中国| 孩交精品XXXX视频视频| 天天摸日日摸狠狠添| 成都私人家庭影院| 欧美成人精品激情在线观看| 伊人精品成人久久综合| 精品无人区卡一卡二卡三乱码| 午夜无码无遮挡在线视频| 久久久国产精品亚洲一区| 手机在线永久免费观看AV片| 精品无码人妻一区二区三区品| 男女无遮挡XX00动态图120秒| 亚洲亚洲人成无码网WWW| 荒野大镖客暴躁老太太| 性色做爰片在线观看WW| 国产精品VIDEOSSEX国产| 色一情一乱一伦麻豆| 宝贝腿抬高点让我爽一点麻豆| 欧美人与动性XXXXX交性| 中文字幕无码AV正片AV| 美国6一12呦女精品| 在我们寝室当寄吧套子怎么样| 久久久一本精品99久久精品66| 亚洲人成网77777色在线播放| 黑人上司与人妻激烈中文字幕| 小婷又紧又嫩又窄又多水| 国产精品麻豆欧美日韩WW| 无线乱码A区B区C区D| 国产精品一国产精品一K频道| 无码H肉男男在线观看免费| 国产成人综合欧美精品久久| 天堂AV无码大芭蕉伊人AV不卡| 国产AV无码专区亚洲AV麻豆丫| 少妇粉嫩小泬喷水视频在线观看 | 狠狠色噜噜狠狠狠狠AV不卡| 太太你也不想你丈夫被开除吧| 欧美亚洲综合另类色妞网| FREE性VIDEOXXⅩ欧美| 欧美成人AⅤ高清免费观看| IGAO在线视频成人免费| 人人妻人人爽人人爽| 大杳蕉在线影院在线播放| 天堂资源在线WWW中文| 国产精品丝袜高跟鞋| 性FREE毛茸茸VIDEOS| 好男人观看免费视频2019| 亚洲精品一线二线三线无人区| 久久国产情侣露脸精品| 永久免费观看午夜成人网站| 男生女生一起相差差差30| WWW夜插内射视频网站| 老熟妇高潮一区二区三区网| EEUSS影院在线观看| 婷婷综合久久中文字幕| 成 人影片免费观看| 无码人妻精品一区二区蜜桃温柔乡 | 亚洲日韩精品无码专区网址 | 熟妇人妻久久中文字幕老熟妇| 国产精品原创AV片国产日韩| 亚洲爆乳AⅤ无码一区二区| 国产亚洲日韩欧美另类丝瓜APP| 无码专区亚洲综合另类| 国产在线一区二区三区AV| 亚洲成AV人片在线观看WWW| 含羞草传媒每天免费三次看剧| 亚洲AV无码乱码在线观看裸奔 | 欧美人交a欧美精品a∨一区| 黑人巨大精品欧美| 张柏芝跪下吃J8图片| 女人夜夜春高潮爽A∨片| 777亚洲精品乱码久久久久久| 免费午夜爽爽爽WWW视频十八禁| 中文字幕无码乱人伦| 麻豆果冻传媒新剧国产短视频| 低头看我是怎么C哭你的| 亚洲精品色无码AV试看| 亚洲AV成人精品网站在线播放| 国产GAYSEXCHINA男外| 亚洲AV永久无码精品成人| 我和公发生了性关系视频| 国产乱妇乱子在线播放视频| 小雪的L3又嫩又紧又多水图| 欧美成人看片黄A免费看| 亚洲人成网站观看在线播放| 女女女女女裸体处开BBB| 苍井空张开腿实干12次| 偷窥 亚洲 另类 图片 熟女| 国产熟女一区视频在线播放| 亚洲自偷自拍另类小说| 蜜臀亚洲AV无码精品国产午夜.| 国产69精品久久久久9999不| 无码人妻精品一区二区三区在线| 女被啪到深处喷水GIF动态视频 | 国产精品成人一区二区三区视频 | 手机免费AV片在线观看| 国产丶欧美丶日本不卡视频| 影音先锋亚洲AV少妇熟女| 男配每天都在体内成结节| 麻豆人妻少妇精品无码专区2| 亚洲中文精品久久久久久不卡| 内射到高潮的H小说| 久久99老妇伦国产熟女高清| 中文字幕巨爆区乳爆系列| 人妻丰满熟妇aⅴ无码HD|