2022年3月2日

vue传值-父子&兄弟&路由(学习笔记)

作者 admin
父传子:
A:
我们要把arr每一个值传给子组件B
<template>
	<div>
		1:<子组件B v-for="(item,index) in arr" :item="item" :key="index"></子组件B>
		如果要把一个数组直接传过去,那么就直接这么写:
		2:<子组件B :arr="arr"></子组件B>
	</div>
</template>

<script>
import 子组件B from './b.js';
	export default {
             components:{
                子组件B,
              }
		name:'父组件A',
		data(){
			return {
				arr:[1,2,3,4,5] //把这个arr传给子组件B
			}
		}
	}
</script>



B:
<script>
	export default {
		props:['arr'],//这里接收
		mounted(){
			console.log(this.arr)//[1,2,3,4,5]
		}
	}
</script>

子传父:

B:
<template>
  <div>
    <button @click='handleFun'>测试一下</button>
  </div>
</template>
<script>
	export default {
		data(){
			return {
				msg:"123123123123"
			}
		},
		methods:{
		        this.$emit('add',this.msg)
		}
	}
</script>


A:
<template>
  <div>
    <button @add='add'>测试一下{{msg}}</button>
  </div>
</template>

<script>
	export default {
               methods:{
			add(data){
                         this.msg = data;
                  }
	}
</script>

兄弟传值
//bus.js:
import Vue from 'vue'
export default new Vue

父组件:

<template>
     <components-a></components-a>
     <components-b></components-b>
</template>

components-b:
<script>
	import bus from '@/assets/bus'
	export default {
		data(){
			return {
				msg:"123123123123"
			}
		},
		mounted(){
			bus.$emit('msgB',this.msg)
		}
	}
</script>


components-:
<script>
	import bus from '@/assets/bus'
	export default {
		mounted(){
			bus.$on('msgB',(msgb)=>{
				console.log(msgb)  //123123123123
			})
		}
	}
</script>


路由传值:

一、通过路由带参数进行传值

①两个组件 A和B,A组件通过query把orderId传递给B组件(触发事件可以是点击事件、钩子函数等)

this.$router.push({ path: ‘/conponentsB’, query: { orderId: 123 } }) // 跳转到B

②在B组件中获取A组件传递过来的参数this.$route.query.orderId


二、sessionStory:

①两个组件A和B,在A组件中设置缓存orderDataconst orderData = { ‘orderId’: 123, ‘price’: 88 }s

essionStorage.setItem(‘缓存名称’, JSON.stringify(orderData))


②B组件就可以获取在A中设置的缓存了const dataB = JSON.parse(sessionStorage.getItem(‘缓存名称’))