vue 的sync用法


這個關鍵字在v2.3.0+ 新增,注意帶有 .sync 修飾符的 v-bind 不能和表達式一起使用 (例如 v-bind:title.sync=”doc.title + ‘!’” 是無效的)。說白了他就是子組件改變父組件DATA的一種方法,但是個人覺得要慎用吧,不然有容易污染組件數據的隱患,

可以運行一下示例代碼,參考vue  dev  tool ,就會明白

father.vue:

<template>
  <div class="hello">

    //input實時改變wrd的值, 並且會實時改變box里的內容
    <input type="text" v-model="wrd">
    <hr>
    這是name---{{sname}}
    <!-- 不寫sync不更新父組件數據,變成了單向的父組件傳值給子組件的寫法 -->
    <box :word.sync="wrd" :sname.sync="sname" ></box>
  </div>
</template>

<script>
import box from './child.vue'  //引入box子組件
export default {
  name: 'HelloWorld',
  data() {
    return {
      wrd: '',
      sname:'zs',
      age:12
    }
  },
  components: {
    box
  }  
}
</script>

child.vue

<template>
  <div class="hello">
    <div class="ipt">
      <hr>
      ---------------------------------------------
      <br>
      <input type="text" v-model="str">
    </div>

    //word是父元素傳過來的
    <br>
    <h2>{{ word }}</h2>
    <br>
    //sname也是
    <br>
  <h2>{{ sname }}</h2>
  </div>
</template>

<script>
export default {
  name: 'box',
  data() {
    return {
      str: '',
    }
  },
  props: {
    word: {
      type:String,
      default:''
    },
    sname:{
      type:String,
      default:'ls'
    }
  },
  watch: {
    str: function(newValue, oldValue) {
      //每當str的值改變則發送事件update:sname , 並且把值傳過去,這時會修改父組件的data值
      this.$emit('update:sname', newValue);
      //如果多個值又不想用object,可以多次emit
      this.$emit('update:word', newValue+'1');
    }
  }
}
</script>
  


免責聲明!

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



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