vue的prop父子組件傳值


props down, events up

父組件通過 props 向下傳遞數據給子組件;子組件通過 events 給父組件發送消息。

靜態 props

要讓子組件使用父組件的數據,需要通過子組件的 props 選項。給 childNode 添加一個 props 選項和需要的forChildMsg數據;

var childNode = {
  template: `
   <div>
    {{forChildMsg}}
   </div>
   `,
  props: [ "for-child-msg" ]
};
props 聲明的屬性,在父組件的 template 模板代表子組件的地方,屬性名需要使用中划線寫法;
子組件 props 屬性聲明時,使用小駝峰或者中划線寫法都可以;而子組件的模板使用從父組件傳來的變量時,需要使用對應的小駝峰寫法
 

動態 props

在模板中,要動態地綁定父組件的數據到子組件模板的 props,和綁定 Html 標簽特性一樣,在父組件的template模板里使用v-bind綁定;

<child : for -child-msg= "childMsg2" ></child>
 
props 驗證
驗證傳入的 props 參數的數據規格,如果不符合數據規格,Vue 會發出警告。
Vue.component( "example" , {
  props: {
  // 基礎類型檢測, null意味着任何類型都行
  propA: Number,
  // 多種類型
  propB: [String, Number],還可以在 props 定義的數據中加入自定義驗證函數,當函數返回 false 時,輸出警告。該函數命名是規定叫validator,自定義函數名不會生效。
props: {
  "for-child-msg" : {
   validator: function (value) {
   return value > 100;
   }
  }
}
 
單向數據流
props 是單向綁定的:當父組件的屬性變化時,將傳導給子組件,但是不會反過來。
 
修改 props 數據
定義一個局部變量,並用 prop 的值初始化它。但是由於定義的 ownChildMsg 只能接受 forChildMsg 的初始值,當父組件要傳遞的值變化發生時,ownChildMsg 無法收到更新。
更加妥帖的方式是使用變量存儲 prop 的初始值,並用 watch 來觀察 prop 值得變化。發生變化時,更新變量的值。
  data() {
  return {
   ownChildMsg: this .forChildMsg
  };
  },
  watch: {
  forChildMsg() {
   this .ownChildMsg = this .forChildMsg;
  }
  }
 
對於絕大多數特性來說,從外部提供給組件的值會替換掉組件內部設置好的值。所以如果傳入  type="text" 就會替換掉  type="date" 並把它破壞!慶幸的是, class 和  style 特性會稍微智能一些,即兩邊的值會被合並起來,從而得到最終的值。
 
如果你不希望組件的根元素繼承特性,你可以在組件的選項中設置 inheritAttrs: false


免責聲明!

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



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