1. 程式人生 > >vue元件系列6、雙向繫結方法

vue元件系列6、雙向繫結方法

開發十年,就只剩下這套架構體系了! >>>   

雙向繫結,湊合能用的方法,

<template>
  <div>
    <div>父傳子 測試</div>

    <!-- 貌似可以設定很多方法 -->
    <children
      @input="changevalue"
      @outchang="fun_t1"
      :db_value1="f_data1"
      :db_value2="f_data2"
    ></children>

    <button draggable="true">可以移動的按鈕</button>
    <p>==================下面是雙向繫結測試 ========================</p>
    <input type="text" v-model="f_data1" />
    <input type="text" v-model="f_data2" />
  </div>
</template>
 
<script >
export default {
  components:{
        'children':()=>import("./personmode/children.vue"),
  },
  data() {
    return {
      tm:'',
      parentMsg:'test',
      f_data1:'',
      f_data2:'',
    };
  },
  methods: {
    changevalue:function(parm1,parm2){
      console.log('引數1='+this.f_data1);
      console.log('引數2='+this.f_data2);
      this.f_data1=parm1;
      this.f_data2=parm2;
    },
    fun_t1:function(parm){
      console.log('這裡執行方法   '+parm);
    }
  }
};
</script>

子元件

<template>
  <div>    
    <h4>我要實現雙向繫結</h4>
    <input type="text" v-model="my_db_value1" />
    <p>{{ my_db_value1 }}</p>
    <input type="text" v-model="my_db_value2" />
    <p>{{ my_db_value2 }}</p>
    <button @click="mytest">再調方法</button>
  </div>
</template>

<script>
export default {
  name:'my_test_child',
  data() {
    return {
      my_msg:'',
      my_data:'',
      my_db_value1:'',
      my_db_value2:''
    };
  },
  props:{
    msg:{
          type: String,
          default: '未初始化',
        },
    db_value1:{
      type:String,
      default:'',
    },
    db_value2:{
      type:String,
      default:'',
    }    
  },
  watch:{
    db_value1(val){
      this.my_db_value1=val;
    },
    db_value2(val){
      this.my_db_value2=val;
    },
    my_db_value1(val){
      this.$emit('input',val,this.my_db_value2);
    },
    my_db_value2(val){
      this.$emit('input',this.my_db_value1,val);
    }
  },
  methods: {
    mytest:function(){
      this.$emit('outchang','呼叫方法');
    }
  }
};
</script>