v-model原理:父组件、子组件使用v-model

父组件、子组件实现下拉框
使用v-model的
父组件代码:

<template>
  <div id="app">
      <SelectOne v-model="cityId"></SelectOne>
  </div>
</template>
<script>
import SelectOne from './components/SelectOne.vue'

export default {
  name: 'App',
  components:{
    SelectOne
  },
  data(){
    return{
      cityId:102
    }
  }
}
</script>
<style scoped>
</style>

子组件

<template>
  <select :value='value' @change="fn">
    <option value="101">北京</option>
    <option value="102">东京</option>
    <option value="103">南京</option>
    <option value="104">西京</option>
  </select>
</template>

<script>
export default {
    props:{
        value:Number
    },
    methods:{
        fn(e){
            this.$emit('input',parseInt(e.target.value));
        }
    }
}
</script>

<style>

</style>

运行结果:

不使用v-model的,子组件

<template>
  <select :value='cityId2' @change="fn">
    <option value="101">北京</option>
    <option value="102">东京</option>
    <option value="103">南京</option>
    <option value="104">西京</option>
  </select>
</template>

<script>
export default {
    name:'SelectTwo',
    props:{
        cityId2:Number
    },
    methods:{
        fn(e){
            this.$emit('changeCityId',parseInt(e.target.value));
        }
    }
}
</script>

<style>

</style>

父组件:

<template>
  <div id="app">
      <SelectTwo :cityId2="cityId2" @changeCityId="fn"></SelectTwo>
  </div>
</template>
<script>
import SelectTwo from './components/SelectTwo.vue'
export default {
  name: 'App',
  components:{
    SelectTwo
  },
  data(){
    return{
      cityId2:103
    }
  },
  methods:{
    fn(cityId2){
      this.cityId2 = cityId2;
    }
  }
}
</script>
<style scoped>
</style>

运行结果:

posted @ 2024-07-18 15:00  坚持不懈的大白  阅读(20)  评论(0编辑  收藏  举报
@format