Vue中常見參數傳遞方式


文章內容:這里只有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
    this.$router.push({
      name: `two`,    // 這里只能是name,對應路由
      params: { id: this.message, data: 456 }
    });
 // 接收
  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
    this.$router.push({
      path: `/two`,    // 這里可以是path也可以是name(如果是name,name:'two'),對應路由
      query: { id: this.message, data: 456 }
    });
 // 接收
  created() {
      this.msg1=this.$route.query.id    // 123
      this.msg2=this.$route.query.data  // 456
   }

// url顯示,數據顯示在url
  /two?id=123&data=456

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM