文章內容:這里只有vue中父子組件傳參、路由間的傳參
(另外還有vuex、儲存本地、中央bus等方式);
https://www.cnblogs.com/jing-zhe/p/11588401.html
一、父子組件
1.1父傳子(props)
<!-- 父組件father.vue -->
<template>
<div>
<div>這里是father組件</div>
<div>這是父組件要傳給子組件的參數:{{msg}}</div>
<!-- 1.傳遞:data1為動態參數msg的參數名,名字自定義,與子組件接收參數名同名
data2為靜態參數的參數名,名字自定義,與子組件接收參數名同名 -->
<child :data1="msg" data2="777"></child>
</div>
</template>
<script>
import child from "./child";
export default {
data() {
return {
msg:"666"
}
},
components: {
child
}
};
</script>
<style scoped></style>
<!-- 子組件child.vue -->
<template>
<div>
<div>這里是child組件</div>
<!-- 3.使用:這里就是接收的父組件參數 -->
<div>接受的父組件動態參數:{{ data1 }}</div>
<div>接受的父組件靜態參數:{{ data2 }}</div>
<div>接受的父組件參數:{{ data }}</div>
</div>
</template>
<script>
export default {
// 2.接收:props接收父組件參數,data1與data2為傳遞參數的參數名,與父組件內同名
props: ["data1", "data2"],
data() {
return {
data: "默認值"
};
},
// 3.使用:直接用this調用
mounted() {
this.data = this.data1;
}
};
</script>
<style scoped></style>
這里要稍微注意一下,父組件所傳遞參數如果是需要在生命周期中獲取賦值,就不能綁定在mounted中,否則子組件方法中this調用不會成功。生命周期順序:父beforeMount->子beforeCreate……子mounted->父mounted
1.2子傳父($emit)
<!-- 子組件child.vue -->
<template>
<div>
<div>這里是child組件</div>
<!-- 這里就是接收的父組件參數 -->
<input type="button" value="點擊向父組件傳參" @click="toFather">
</div>
</template>
<script>
export default {
data(){
return{
cmsg:'我是子組件的參數'
}
},
methods: {
toFather(){
// 1.子組件觸發父組件方法
// $emit第一個參數為所要觸發的父組件函數,函數名可自定義但要與父組件中對應函數名同名
// $emit第二個參數就是子組件向父組件傳遞的參數
this.$emit('receive',this.cmsg);
}
},
};
</script>
<style scoped></style>
<!-- father.vue -->
<template>
<div>
<div>這里是father組件</div>
<div>接收子組件參數:{{fmsg}}</div>
<!-- 2.在對應子組件上綁定函數,這里“receive”是函數名,可自定義但要與子組件觸發函數同名 -->
<child @receive="fromChild"></child>
</div>
</template>
<script>
import child from "./child";
export default {
data() {
return {
fmsg:''
};
},
methods: {
// 接收子組件參數,賦值
fromChild(data){
this.fmsg=data;
}
},
components: {
child
}
};
</script>
<style scoped></style>
二、路由間的參數傳遞(query和params)
query和parmas的使用方式大致相同,這里簡單介紹一下路由配置、參數的傳遞和調用
2.1params,參數顯示在url
// router的配置
{
path: "/two/:id/:data", // 跳轉的路由后加上/:id,多個參數繼續按格式添加,數據按順序對應
name: "two",
component: two
}
// 跳轉,這里message為123
this.$router.push({
path: `/two/${this.message}/456` // 直接把數據拼接在path后面
});
// 接收
created() {
this.msg1=this.$route.params.id // 123
this.msg2=this.$route.params.data // 456
}
// url顯示,數據顯示在url,所以這種方式傳遞數據僅限於一些不那么重要的參數
/two/123/456
2.2params,參數不顯示在url,刷新頁面數據消失
// router的配置
{
path: "/two",
name: "two",
component: two
}
// 跳轉,這里message為123
// 接收
created() {
this.msg1=this.$route.params.id // 123
this.msg2=this.$route.params.data // 456
}
// url顯示,數據不顯示在url
/two
2.3query,參數顯示在url
// router的配置
{
path: "/two",
name: "two",
component: two
}
// 跳轉,這里message為123
// 接收
created() {
this.msg1=this.$route.query.id // 123
this.msg2=this.$route.query.data // 456
}
// url顯示,數據顯示在url
/two?id=123&data=456

