gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

vue組件怎么傳值

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

vue組件怎么傳值

本教程操作環境:windows7系統、vue3版,DELL G3電腦。

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

vue組件怎么傳值

1、父組件傳給子組件

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

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

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

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

Children.vue

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

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>
登錄后復制

2、子組件傳給父組件

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

Children.vue

<template>     <div class="parent">         這里是計數:{{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>
登錄后復制

Parent.vue

<template>     <div class="parent">         這里是計數:{{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>
登錄后復制

3、兄弟組件間傳值

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

EventBus.js

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

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(){             	// 通過事件總線發送消息                 eventBus.$emit('pushMsg',this.childNum++)             }         }     } </script>
登錄后復制

Children2.vue

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

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>
登錄后復制

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

4、路由間傳值

i.使用問號傳值

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

B頁面可以使用 this.$route.query.name 來獲取A頁面傳過來的值

上面要注意router和route的區別

ii.使用冒號傳值

配置如下路由:

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

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

iii.使用父子組件傳值

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

<router-view :type="type"></router-view>
登錄后復制

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

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:{             // 父組件可以調用這個方法傳入msg             updateMsg(msg){                 this.msg = msg             }         },     } </script>
登錄后復制

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

<template>     <div class="parent">         <!-- 給子組件設置一個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>
登錄后復制

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

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

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

provide 選項允許我們指定我們想要提供給后代組件的數據/方法

然后在任何后代組件里,我們都可以使用 inject 來給當前實例注入父組件的數據/方法:

inject: ['getName']
登錄后復制

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>
登錄后復制

Children.vue

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

7、祖傳孫 $attrs

正常情況下需要借助父親的props作為中間過渡,但是這樣在父親組件就會多了一些跟父組件業務無關的屬性,耦合度高,借助$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>
登錄后復制

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>
登錄后復制

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: {},     // 由于父組件已經接收了name屬性,所以name不會傳到子組件了     props:['sex','age','hobby','name'],     data() {       return {}     },     methods: {       sayKnow(){         this.$emit('sayKnow','我知道啦')       }     },     mounted() {     }   } </script>
登錄后復制

顯示結果

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

8、孫傳祖

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

9、$parent

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

語法:

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

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

10、sessionStorage傳值

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

語法:

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

注意:里面存的是鍵值對,只能是字符串類型,如果要存對象的話,需要使用 let objStr = JSON.stringify(obj) 轉成字符串然后再存儲(使用的時候 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)
登錄后復制

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
熟女性饥渴一区二区三区| 亚洲最大综合网| 国产农村妇女精品久久| 丰满少妇在线观看| 97公开免费视频| 日本xxxxxxx免费视频| 妺妺窝人体色www在线小说| 国产精品国产三级国产专区51| 污污视频在线免费| 激情在线观看视频| 天堂av免费看| 日韩极品视频在线观看 | 久久亚洲国产成人精品无码区| 五月天色婷婷综合| 国产精品久久国产| 亚洲午夜精品久久久久久人妖| 春日野结衣av| 国产精品v日韩精品v在线观看| 加勒比av中文字幕| av影院在线播放| 国产91美女视频| 999精彩视频| 香蕉精品视频在线| 免费无码不卡视频在线观看| 538在线视频观看| 在线观看污视频| 日韩一级在线免费观看| 久久婷婷中文字幕| 97视频久久久| 亚洲日本黄色片| 18岁网站在线观看| 91网址在线观看精品| 青青草精品视频在线| 在线看的黄色网址| 六月婷婷激情综合| 在线观看国产一级片| 亚洲国产成人精品无码区99| 孩娇小videos精品| www.av中文字幕| 亚洲 欧洲 日韩| 国产精品视频黄色| 黄色www网站| 四虎4hu永久免费入口| 国产超碰在线播放| 日本中文字幕亚洲| 免费观看黄色大片| 亚洲天堂2018av| 久久久久人妻精品一区三寸| 欧美日韩激情四射| 一级片黄色免费| 我要看一级黄色大片| 一女被多男玩喷潮视频| av动漫在线播放| 韩国黄色一级大片| 日本高清免费在线视频| 尤蜜粉嫩av国产一区二区三区| 夜夜添无码一区二区三区| 欧美三级午夜理伦三级老人| 一区二区三区入口| 欧美日韩在线免费播放| 国产又黄又大又粗视频| 日本韩国欧美在线观看| 人妻久久久一区二区三区| 国产美女主播在线播放| 国产成人一区二区三区别| 在线观看av的网址| 欧美在线观看黄| 人人妻人人澡人人爽欧美一区双 | 亚洲另类第一页| 亚洲国产高清av| 欧美国产日韩另类| 国产xxxxhd| www.一区二区.com| 久久黄色片视频| 免费无码不卡视频在线观看| 欧美一级在线看| 99久久国产宗和精品1上映| 丁香婷婷激情网| 免费精品99久久国产综合精品应用| 日韩爱爱小视频| 成年人三级视频| 日本欧美视频在线观看| 国产性xxxx18免费观看视频| 亚洲乱码国产一区三区| 亚洲第一天堂久久| 成人性生活视频免费看| 国产福利一区视频| 99热一区二区三区| 亚洲 高清 成人 动漫| 不卡的av中文字幕| 国产美女永久无遮挡| 99视频精品免费| 91制片厂免费观看| 鲁一鲁一鲁一鲁一色| jizz欧美性11| 欧美在线一区视频| 亚洲图色中文字幕| 亚洲美免无码中文字幕在线| 久热精品在线观看视频| 黄色一级大片免费| 亚洲一级免费观看| 成年人午夜免费视频| 在线一区二区不卡| 人妻有码中文字幕| 中国一级黄色录像| 国产一区二区在线免费播放| 国产成人一区二区三区别| 在线看的黄色网址| 国产精品-区区久久久狼| 四虎永久免费网站| 欧美自拍小视频| 91专区在线观看| 免费看日本黄色| 日韩av自拍偷拍| 中文字幕国内自拍| 国产肥臀一区二区福利视频| 亚洲国产一二三精品无码| 福利片一区二区三区| 精品www久久久久奶水| 日韩黄色短视频| 欧美一级中文字幕| 国产又黄又爽免费视频| 午夜精品中文字幕| mm1313亚洲国产精品无码试看| 你真棒插曲来救救我在线观看| 在线a免费观看| 中文字幕在线视频一区二区| av中文字幕网址| 国产一级片自拍| 污视频网址在线观看| 色综合天天色综合| 亚洲精品久久久中文字幕| 中文字幕在线观看第三页| 手机看片福利盒子久久| 日本美女高潮视频| 亚洲欧美自拍另类日韩| 亚洲怡红院在线| eeuss中文| 日本香蕉视频在线观看| 国产精品又粗又长| 人妻精品无码一区二区三区 | 老司机久久精品| 亚洲一级片av| 91大学生片黄在线观看| 欧美中日韩在线| 国产偷人视频免费| 91精品无人成人www| 天天操夜夜操很很操| 菠萝蜜视频在线观看入口| 欧美另类videosbestsex日本| 国产美女在线一区| 精品少妇无遮挡毛片| 天天久久综合网| 97超碰人人澡| 高清av免费看| 福利视频一二区| 岛国av在线免费| 欧美激情亚洲天堂| 不卡av免费在线| 久久久天堂国产精品| 欧美国产亚洲一区| 欧美在线a视频| 欧美日韩激情视频在线观看| 毛片毛片毛片毛| 欧美视频免费看欧美视频| 一级黄色特级片| 欧美牲交a欧美牲交| 免费黄频在线观看| 国产精品免费观看久久| 不卡中文字幕在线| 欧美精品aaaa| 国产精品裸体瑜伽视频| 尤物网站在线看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 免费在线观看污网站| 国产精品成人久久电影| 午夜大片在线观看| 欧美精品色婷婷五月综合| 色偷偷中文字幕| 182午夜在线观看| 久久久久人妻精品一区三寸| 日韩精品久久一区二区| jizz18女人| chinese少妇国语对白| r级无码视频在线观看| 91国内在线播放| 天天操天天爱天天爽| 人妻少妇被粗大爽9797pw| 欧美精品一区二区三区三州| www.-级毛片线天内射视视| 中文av一区二区三区| 天堂av在线网站| 国产三级日本三级在线播放| 两根大肉大捧一进一出好爽视频| 日本免费a视频| 国产爆乳无码一区二区麻豆| 91传媒免费视频| 欧美中文字幕在线观看视频| 肉大捧一出免费观看网站在线播放 | 欧美日韩怡红院|