vue平行組件傳值

  • 2019 年 10 月 7 日
  • 筆記

平行組件傳值

  • 通過平行組件傳值可以實現任何情境下的傳值,包括(父傳子,子傳父)

  • 程式碼示例

    <!DOCTYPE html>  <html lang="en">  <head>      <meta charset="UTF-8">      <title>Title</title>  </head>  <body>  <div id="app">        <my-alex></my-alex>      <hr>      <my-mjj></my-mjj>    </div>  <script src="https://cdn.bootcss.com/vue/2.5.21/vue.js"></script>  <script>      // 藉助一個空的VUE對象  實現組件之間通訊      let bus = new Vue();        //子組件A      let A = {          template: `              <div>                  <h2>這是子組件: my-alex</h2>                  <p> my-mjj被選中的次數:{{ num }} </p>              </div>          `,          data() {              return {                  num: 0              }          },          // 關鍵點 第二步 監聽B組件觸發了xuanwo A就加1          mounted() {              //在文檔準備就緒之後就要開始監聽bus是否觸發了xuanwo的事件              /*              bus.$on("xuanwo",function(val){                  // this.num += 1;                  console.log(val);// 點擊B 可以跟著加1了                  //關鍵點 第三步  怎麼改A裡面的num 的值                  console.log(this); //bus對象  不是A              })              */                bus.$on("xuanwo",(val)=>{  //把上面的匿名函數改成箭頭函數                  // this.num += 1;                  console.log(val);  //點擊B 可以跟著加1了                  //關鍵點 第三步  怎麼改A裡面的num 的值                  console.log(this); //A組件                  this.num = val;              })          }      };        //子組件B      let B = {          template: `              <div>                  <h2>這是子組件: my-mjj</h2>                  <button v-on:click="add">選我</button>                </div>          `,          data(){            return{ num:0 }          },          methods:{              add(){                  this.num += 1;                  // **** 關鍵點第一步 利用bus 對象拋出一個自定義事件                  bus.$emit("xuanwo",this.num)              }          }      };        //實例化根組件      let app = new Vue({          el: "#app",          data: {              totalNum: 0          },          components: {              "my-alex": A,              "my-mjj": B,          }      })  </script>  </body>  </html>