日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue組件間數據傳遞的方式(3種)

瀏覽:34日期:2023-01-08 09:01:14
vue中傳遞數據的方式有哪些數據流的方式傳遞數據

通過 props 傳遞屬性

父級給demo2組件綁定一個msg數據

父組件

<template> <div class=’container’> <demo2 :msg='msg' @change='change' /> </div></template><script>import demo2 from ’./demo2’export default { data(){ return { msg:’這是測試數據’ } }, methods:{ change(value){ this.msg = value } }, components: { demo2 }}</script>

子組件通過定義props來使用msg,$emit觸發外部的函數來改變父級傳入的值

子組件

<template> <div class=’container’> {{msg}} <button @click='change'>點一下</button> </div></template><script>export default { props:[’msg’], methods:{ change(){ this.$emit(’change’,’這是新的數據’) } }}</script>

通過 $attrs 來收集屬性

$attrs 會收集組件上綁定的屬性,對應class和style不會處理。如果與props同用,props的優先級要高于attrs

父組件

<template> <div class='container'> <demo2 :msg='msg' /> </div></template><script>import demo2 from './demo2';export default { data() { return { msg: '這是測試數據' }; }, components: { demo2 }};</script>

子組件中this.$attrs會收集組件上綁定的屬性

子組件

<template> <div class='container'>{{$attrs.msg}} </div></template><script>export default { // inheritAttrs:true, // 會隱藏行間的屬性 // props:[’msg’], // 這里props的優先級比$attrs要高,如果設置了props,那么msg會在data上,而$attrs中就沒有msg created(){ console.log(this.$attrs) // 對象中只有msg一個屬性 }};</script>

通過$listeners 來收集方法

$listeners 會收集組件上綁定的方法。 可以通過傳遞實參的方式改變父組件的值

父組件

<template> <div class=’container’> {{msg}} <demo2 @msgChange='change'/> </div></template><script>import demo2 from ’./demo2’export default { data () { return { msg: ’這是測試數據’ } }, methods: { change(newvalue){ this.msg = newvalue; } }, components: { demo2 }}</script>

子組件中this.$listeners會收集綁定在組件上的方法。通過this.$listeners.XXX()可以直接調用,以此可以來修改父組件data中的值

子組件

<template> <div class='container'> <button @click='change'>點一下</button> </div></template><script>export default { // inheritAttrs:true, created(){ console.log(this) }, methods:{ change(){ // this.$emit(’msgChange’) // this.$parent.change() // 與$emit功能相同,$parent也能夠實現該效果 this.$listeners.msgChange(’改變后的值’) } }};</script>

通過provide提供依賴,inject注入依賴實現數據跨多級子組件傳遞

通過給父級的 provide 提供一個依賴對象,讓其所用子組件都能訪問到這個對象

“provide 和 inject 綁定并不是可響應的。這是刻意為之的。然而,如果你傳入了一個可監聽的對象,那么其對象的 property 還是可響應的。”

其實也就是說provide 和 inject 綁定本身不做額外的事情(數據綁定之類),只是將提供的數據暴露給子組件。那么暴露出來的數據是不是可相應的就取決與數據本身

父組件

<template> <div class=’container’> <demo2 :msg='msg' @msgChange='change'/> </div></template><script>import demo2 from ’./demo2’export default { provide(){ return { msg:this.msg, msgChange:this.change, // 這里this本身就是一個可監聽的對象。 // this也就是當前vue實例本身已完成了數據響應,這里只是將這個實例暴露給了他的所用子組件 app:this } }, data () { return { msg: ’這是測試數據’ } }, methods: { change(){ this.msg += 1; } }, components: { demo2 }}</script>

后代的子組件可以通過reject注入相應的依賴

子組件

<template> <div class='container'> <!-- 這個msg的值不會變 --> <div>{{msg}} </div> <!-- msg的值會變,因為依然指向父組件的vue實例 --> <div>{{app.$data.msg}}</div> <button @click='msgChange'>點一下</button> </div></template><script>export default { inject:[’msg’,’msgChange’,’app’]};</script>直接訪問組件實例的方式獲取數據

通過 ref 獲取組件實例

ref 屬性定義在組件上獲取的是組件的vue實例,定義在原生標簽上獲取的是對應的dom

需要等掛載之后才能拿到$refs中的內容

父組件

<template> <div class=’container’> {{msg}} <demo2 ref='test'/> </div></template><script>import demo2 from ’./demo2’export default { data () { return { msg: ’’ } }, // 需要等掛載之后才能拿到$refs中的內容。 // 所用不能在模板中使用 mounted(){ this.msg = this.$refs.test.msg }, components: { demo2 }}</script>

子組件

<script>export default { data(){ return { msg:’這是子組件的數據’ } }}</script>

通過$parent/$children 獲取組件實例

同樣的也是必須在mounted之后才能獲取對應實例

這里是父組件展示子組件中的msg,子組件展示父組件的msg

父組件通過$children獲取子組件實例

父組件

<template> <div class=’container’> {{msg}} <demo2/> </div></template><script>import demo2 from ’./demo2’export default { data () { return { msg: ’’, fatherMsg:'這是父組件的內容' } }, mounted(){ console.log(this.$children) //獲取子組件實例上的sonMsg,$children是個數組需要選擇對應的索引 this.msg = this.$children[0].sonMsg; }, components: { demo2 }}</script>

子組件通過$paren獲取父組件實例

子組件

<template> <div class=’container’> {{msg}} </div></template><script>export default { data () { return { msg:’’, sonMsg: ’這是子組件的數據’ } }, mounted(){ //獲取父組件的實例上的fatherMsg this.msg = this.$parent.fatherMsg; }}</script>定義一個公共倉庫共享數據

定義 eventBus 共享數據

在Vue原型上添加一個$bus為一個新的vue對象,可以在全局的vue實例中通過$bus獲取到這個vue對象,從而獲取這個對象上的屬性和方法。

在main.js中定義

Vue.prototype.$bus = new Vue({ data:{ a:1, b:2 }, methods:{ log(){ console.log(this.a) } }})

全局Vue實例都能獲取到定義在$bus上的屬性和方法

通過 Vuex 共享數據

官方給出的跨多組件傳遞數據的解決方案。

store index.js

import Vue from ’vue’import Vuex from ’vuex’Vue.use(Vuex)export default new Vuex.Store({ state: { test:’123123123’, test2:’123123123’, }, mutations: { changeTest(state,payload){ console.log(state,payload) state.test = payload.value }, changeTest2(state,payload){ console.log(state,payload) state.test2 = payload.value } }, actions: { asyncChageTest({commit},payload){ setTimeout( ()=>{ commit(’changeTest2’,payload) },2000) } }, modules: { }})

在組件中使用

<template> <div class=’container’> {{this.$store.state.test}} {{test}} {{this.$store.state.test2}} {{test2}} <button @click='change'>點一下</button> <button @click='asyncChange'>點一下</button> </div></template><script>// 引入mapState輔助函數改造state數據import { mapState,mapMutations,mapActions } from ’vuex’export default { data(){ return { msg:’這是測試數據’ } }, computed:{ ...mapState([’test’,’test2’]) }, methods:{ // 放異步或者同步的方法引入 ...mapMutations([’changeTest’]), ...mapActions([’asyncChageTest’]), change(){ // 同步修改state值的兩種方法 this.$store.commit(’changeTest’,{value:’改變后test的值’}); // this.changeTest({value:’改變后的值’}) }, asyncChange(){ // 異步修改state值的兩種方法 this.$store.dispatch(’asyncChageTest’,{value:’改變后test2的值’}) // this.asyncChageTest({value:’改變后test2的值’}) } },}</script>

以上就是對Vue中組件間數據傳遞的方式進行了一個總結,在日常的開發中還是需要根據使用的場景采取合適的方式進行數據的傳遞

到此這篇關于Vue組件間數據傳遞的方式(3種)的文章就介紹到這了,更多相關Vue組件間數據傳遞內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品伊人| 久久精品国产大片免费观看| 欧美一级精品| 国产亚洲一区二区手机在线观看| 精品五月天堂| 国产精品nxnn| 精品无人区麻豆乱码久久久| 精品一区二区三区中文字幕在线| 久久影院一区二区三区| 精品亚洲a∨一区二区三区18| 成人在线免费观看91| 免费看久久久| 黄毛片在线观看| 成人va天堂| 亚洲免费影院| 日韩在线麻豆| 国产精品九九| 亚洲一级少妇| 欧美日韩日本国产亚洲在线 | 欧美中文一区| 夜夜精品视频| 国产欧美久久一区二区三区| 国产精品一区二区中文字幕| 亚洲v在线看| 亚洲欧美日韩高清在线| 国产亚洲电影| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区二区国产在线| 日本亚州欧洲精品不卡| 国产精品99久久免费| 在线一区av| 在线亚洲精品| 国产精品久久乐| 日本欧美不卡| 日韩在线视频一区二区三区| 国精品产品一区| 欧美精品羞羞答答| 日本91福利区| 福利一区二区免费视频| 中文国产一区| 日韩福利在线观看| 超级白嫩亚洲国产第一| 九九在线精品| 国产精品中文字幕亚洲欧美| 久久人人97超碰国产公开结果| 免费成人性网站| 久久精品色播| 三级亚洲高清视频| 精品一区二区男人吃奶| 国产亚洲永久域名| 欧美亚洲一级| 99热精品久久| 国产日韩三级| 成人av二区| 国产精品igao视频网网址不卡日韩 | 久久男人av资源站| 中文字幕日韩欧美精品高清在线| 免费日韩av片| 亚洲欧美日韩国产| 国产在线视频欧美一区| 午夜av一区| 18国产精品| 99精品国产一区二区三区| 日韩影院在线观看| 吉吉日韩欧美| 日韩国产欧美在线播放| 国产传媒在线| 日韩欧美三区| 欧美日韩高清| 精品一区二区三区免费看 | 国产精久久久| 亚洲欧美日韩一区在线观看| 国产一区2区| 亚洲97av| 蜜桃tv一区二区三区| 国产精品欧美日韩一区| 婷婷色综合网| 国产成人精品一区二区免费看京| 中文字幕亚洲在线观看| 三上悠亚国产精品一区二区三区 | 欧美日韩国产一区二区三区不卡 | 麻豆精品在线播放| 综合干狼人综合首页| 99国产精品私拍| 狠狠久久伊人| 日韩精品1区2区3区| 国产精品日韩精品中文字幕| 日韩免费福利视频| 日精品一区二区三区| 私拍精品福利视频在线一区| 一区二区三区四区在线观看国产日韩| 精品美女在线视频| 久久男人av| 国产精品tv| 亚洲人成毛片在线播放女女| 久久影院一区| 麻豆免费精品视频| 日韩精品欧美精品| 国产视频一区欧美| 久久国产影院| 91视频精品| 欧美激情福利| 国产视频网站一区二区三区| 婷婷久久免费视频| 免费国产亚洲视频| 久久福利毛片| 亚洲尤物在线| 亚洲欧美日韩视频二区| 精品日韩毛片| 国产99亚洲| 欧美亚洲激情| www.com.cn成人| 国产成人1区| 97精品国产一区二区三区| 久久一区欧美| 毛片不卡一区二区| 久久久精品国产**网站| 欧美黄页在线免费观看| 国产毛片精品| 国产精品免费大片| 免费日韩一区二区三区| 麻豆高清免费国产一区| 国产精品115| 久久精品三级| 国产激情在线播放| 亚洲四虎影院| 影视先锋久久| 欧美日韩中文一区二区| 欧美freesex黑人又粗又大| 成人在线视频免费看| 秋霞国产精品| 蜜臀av一区二区在线免费观看 | 久久久久久久久丰满| 国产精品chinese| 国产精品麻豆成人av电影艾秋 | 亚洲成人三区| 精品在线播放| 丝瓜av网站精品一区二区 | 亚洲高清不卡| 国产精品毛片在线| 一区二区亚洲视频| 国产亚洲一区二区三区不卡| 国产精品hd| 成人福利av| 亚洲激情五月| 美国三级日本三级久久99| 日韩精品一二区| 日韩精品三级| 精品国产亚洲一区二区三区| а√在线中文在线新版| 激情欧美日韩一区| 亚洲精品看片| 国产精品久久久久久久久久久久久久久| 国产福利一区二区三区在线播放| 91日韩在线| 亚洲激情偷拍| 日本强好片久久久久久aaa| 国产精品亚洲二区| 亚洲国产欧美日本视频| 91久久黄色| 日韩不卡在线观看日韩不卡视频| 国产精品亚洲综合久久| 午夜欧美巨大性欧美巨大| 久久国产99| 国产精品视频一区二区三区四蜜臂| 成人av三级| 精品一二三区| 国产精品久久久久av电视剧| 国产精品婷婷| 精品国产亚洲一区二区三区在线 | 亚洲五月婷婷| 久久精品二区三区| 老司机精品久久| 国产精品久久久久久久久免费高清| 精品中文在线| 亚洲欧洲一区二区天堂久久| 91成人在线精品视频| a国产在线视频| 免费视频一区二区| 老鸭窝一区二区久久精品| 欧美日韩中文字幕一区二区三区| 日韩欧美精品一区二区综合视频| 国产成人精品999在线观看| 久久都是精品| 日韩av自拍| 亚洲午夜免费| 性欧美videohd高精| 婷婷亚洲精品| 色老板在线视频一区二区| 免费一级片91| 日韩三区免费| 欧美啪啪一区| 欧美粗暴jizz性欧美20| 国产精品亚洲二区| 国产精品日韩欧美一区| 精品国产亚洲一区二区三区在线 | 鲁鲁在线中文| 97久久亚洲| 午夜国产精品视频| 美腿丝袜亚洲一区|