成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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、父組件傳給子組件

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

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

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

推薦的寫法是在data()里重新定義一個(gè)變量(見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)聽能力,定義一個(gè)公共的事件總線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上還有一個(gè)開源vue-bus庫,可以參考下: https://github.com/yangmingshan/vue-bus#readme

4、路由間傳值

i.使用問號(hào)傳值

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

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

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

ii.使用冒號(hào)傳值

配置如下路由:

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

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

iii.使用父子組件傳值

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

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

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

5、使用$ref傳值

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

首先定義一個(gè)子組件Children.vue

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

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

<template>     <div class="parent">         <!-- 給子組件設(shè)置一個(gè)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(){                 // 通過這個(gè)ID可以訪問子組件的方法                 this.$refs.children.updateMsg('Have you received the clothes?')                 // 也可以訪問子組件的屬性                 console.log('children props:',this.$refs.children.desc)             }         },     } </script>
登錄后復(fù)制

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

假設(shè)父組件有一個(gè)方法 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作為中間過渡,但是這樣在父親組件就會(huì)多了一些跟父組件業(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值是不會(huì)傳到子組件的     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不會(huì)傳到子組件了     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í)例,然后通過這個(gè)實(shí)例就可以訪問父組件的屬性和方法,它還有一個(gè)兄弟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 是瀏覽器的全局對(duì)象,存在它里面的數(shù)據(jù)會(huì)在頁面關(guān)閉時(shí)清除 。運(yùn)用這個(gè)特性,我們可以在所有頁面共享一份數(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ù)制

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

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

// 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號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
麻豆国产MV视频| 色噜噜AV男人的天堂| 道德沦丧一家3口小说| 无人区码一码二码三码区别在哪里| 国内大量揄拍人妻在线视频| 一道本在线视频不卡| 人人做人人爽人人爱| 国产亚洲日韩欧美另类丝瓜APP| 伊人久久中文字幕| 色婷婷综合久久久久中文一区二区| 国内精品国内精品自线在拍| 999精产国品一二三产区区| 玩弄漂亮少妇高潮大叫| 久久亚洲熟妇熟女ⅩXXXHD| 成人无码H免费动漫在线观看| 亚洲AV永久青草无码精品| 欧美成人免费观看在线看| 国产精品久久久久久久久岛| 中国西西大胆女人裸体艺术| 无码人妻斩一区二区三区| 男人GAY自慰吞精网站| 国产亚洲欧美日韩亚洲中文色| 99国内精品久久久久久久漫画| 小雪你的奶好大把腿张开| 人妻 丝袜美腿 中文字幕| 久久国产精品无码一区二区三区 | 国产AV日韩A∨亚洲AV电影| 艳妇臀荡乳欲伦交换H漫画小说| 天堂8在/线中文在线资源8| 男人扒开女人下面猛进猛出| 精品成人一区二区三区四区| 番剧初恋不可能是亲姐姐| 18禁勿入免费网站入口不卡| 亚洲国产成人极品综合| 他的粗大把她捣出白沫| 秋霞网一区二区三区| 老司机带带我免费看| 久久 国产 尿 小便 嘘嘘| 国产一区二区三区在线视頻| 国产999精品2卡3卡4卡| 爱情岛永久地址WWW成人| 97夜夜澡人人爽人人喊A| 一本久道中文无码字幕AV| 亚洲成在人线AV自拍| 无码视频免费一区二区三区| 色婷婷综合久久久久中文| 日本适合十八岁以上的护肤品一| 欧美黑人XXXX性高清版| 女特警被三四个黑人糟蹋| 哦┅┅快┅┅用力啊┅┅在线观看| 麻豆传播媒体APP官网在线观看| 久久久久久久精品2| 欧美一区二区三区啪啪| 麻豆果冻视频传媒APP下载| 久久夜色精品国产噜噜亚洲SV| 久久久国产精品VA麻豆| 久久久久久国产精品免费免费| 久久成人国产精品| 久久中文字幕AV一区二区不卡| 久久久久国色AV免费看图片| 久久久久高潮毛片免费全部播放| 久久久无码精品亚洲日韩蜜桃| 老太BBWWBBWW高潮| 欧美成人v片一区二区三区激情| 欧美丰满少妇XXXXX| 人人妻人人澡人人爽人人精品浪潮| 人妻人人做人做人人爱| 日韩毛片无码永久免费看| 无码高潮喷吹在线播放亚洲| 亚洲AV午夜成人片精品电影| 亚洲中文字幕无码久久综合网| 中文在线官网在线| 床震吃胸膜奶免费视频| 国产一区二区三区导航| 久久久亚洲熟妇熟女ⅩXXXH| 欧洲美女与动交ZOZ0Z| 无码AV蜜臀AⅤ色欲在线观看| 亚洲国产精品久久人人爱| 2021最新久久久视精品爱| 豆国产97在线 | 韩国| 激情影院内射美女| 浪荡人妻共32部黑人大凶器电影| 免费看美女被靠到爽的视频| 色欲国产精品一区成人精品| 亚洲欧美xxxx| 办公室被公司领导C了很多次 | 黑人巨鞭大战丰满少妇| 亚洲精品无码国产| 亚洲AV无码一区二区三区18| 99国内精品久久久久久久| 国产精品毛片一区内射| 萝卜视频高清免费视频日本| 色欲AV蜜臀AV在线观看麻豆| 亚洲无线一二三四区手机| 刺骨PO不吃肉干嘛| 理论片午午伦夜理片1| 我和大佬的365天| CHINA末成年VIDEOS| 极品少妇被啪到呻吟喷水| 日本少妇毛茸茸高潮| 亚洲综合无码无在线观看| 成年网站免费视频黄A站| 久久无码中文字幕免费影院| 脱岳裙子从后面挺进去视频 | 好大好深好猛好爽视频| 奶头被客人玩的又红又肿| 亚洲AV无码成人精品区明星换面 | 国产福利一区二区精品秒拍| 久久亚洲精品无码播放| 亚洲 日韩 欧美 成人 在线| 波多野结衣人妻女教师4| 迷迷糊糊挺进岳身体| 亚洲精品乱码久久久久久蜜桃图片| 被蹂躏的她 电影| 久久精品中文闷骚内射| 亚洲 欧美 国产 制服 动漫| 丰满少妇人妻XXXXX| 人妻久久久精品99系列A片| 成为全校公交车的日常生活| 欧美顶级METART裸体全部自| 99国精产品灬源码1688| 欧美人与性口牲恔配视频o| 亚洲AV无码成人黄网站在线观看| 国产白丝JK捆绑束缚调教视频 | 999国产精品999久久久久久| 久久久久久久精品妇女99| 亚洲国产另类久久久精品| 国产精品亚洲色婷婷99久久精品 | 国产色诱视频在线观看| 无码精品人妻一区二区三区aV | 欧美视频二区欧美影视| 中文字幕在线不卡精品视频99| 看国产一毛片在线看手机看| 一本一道AⅤ无码中文字幕| 久久久老熟女一区二区三区| 亚洲综合激情另类小说区| 久久精品人人做人人爽电影蜜月| 亚洲精品少妇XXXX| 久久精品九九亚洲精品| 在线天堂中文最新版| 男女啪啪进出阳道猛进| 99热热久久这里只有精品68 | 亚洲日韩VA无码中文字幕 | 性XXXX18免费观看视频| 韩国免费A级毛片| 一本一道AV无码中文字幕﹣百度| 伦人伦XXX国产对白| А√天堂中文在线| 首页 综合国产 亚洲 丝袜日本| 国产精品亚洲片在线| 亚洲乱码日产精品B在线| 麻豆国产成人AV在线播放 | 精品一区二区三区不卡少妇av| 一本到无码AV专区无码不卡| 欧美群交射精内射颜射潮喷| 风流少妇又紧又爽又丰满| 丰满的人妻沦为玩物在线| 我被八个男人玩到早上| 精品国产你懂的在线观看| 亚洲精品欧美二区三区中文字幕 | 无码人妻一区二区免费AV| 久99久热爱视频精品免费37| 97久章草在线视频播放| 深入浅出TXL金银花讲的什么| 黄a无码片内射无码视频| 7723影视大全在线观看| 天天看高清影视在线观看| 久久久久亚洲AV无码专区| 成码无人AV片在线电影网站| 亚洲AV永久无码3D动漫在线观 | 51成品网站W灬源码16| 无码国内精品久久综合88| 麻豆国产成人AV高清在线| 国产成人丝袜视频在线观看| 久久久久久精品免费免费麻辣| 野外妓女脱裤子让老头玩| 色偷拍 自怕 亚洲 10P| 久久人人爽人人爽人人片DVD| 国产WW久久久久久久久久| 中文字幕人妻一区二区三区| 校花内裤被涂满了强烈春药| 欧美人妻少妇精品视频专区| 激情内射亚洲一区二区三区爱妻| 八戒八戒神马2021| 影音先锋亚洲亚洲色图| 亚洲 中文字幕 日韩 无码| 强开小婷嫩苞又嫩又紧韩国视频 | 同性男男黄H片在线播放网站| 女人下面被舔视频免费播放电影| 狠狠噜天天噜日日噜色综合| 房中之术御女之功秘术| 99精产国品一二三产区| 亚洲日韩欧美成人一区二区三区| 挺进绝色老师的紧窄小肉| 人妻少妇无码精品专区| 女人带毛的真人图片| 久久午夜羞羞影院免费观看| 黑人玩弄人妻一区二区三区| 国产强奷糟蹋漂亮邻居在线观看| 国产成人精品无码专区|