子组件想要修改自身的值不应该自己修改,应该通过事件触发给父组件让父组件来修改。

  1. //父组件
  2. <template>
  3. <div>
  4. <Switch :value="y" @input=" y = value "/>
  5. <Switch :value="y" @update:value=" y = value "/>
  6. //可以简写为
  7. <Switch v-model:value="y"/>
  8. </div>
  9. </template>
  10. <script lang="ts" >
  11. import Switch from '../lib/Switch1.vue'
  12. import { ref } from 'vue'
  13. export default {
  14. components: {Switch},
  15. setup(){
  16. const y = ref(false)
  17. return {y}
  18. }
  19. }
  20. </script>
  1. //子组件
  2. <template>
  3. <button @click="toggle" :class="{checked:value}"> <span></span> </button>
  4. </template>
  5. <script lang="ts">
  6. import { ref } from 'vue'
  7. export default {
  8. props: {
  9. value: Boolean
  10. },
  11. setup(props, context){
  12. const toggle = ()=>{
  13. context.emit('input', !props.value)
  14. 父组件改写为v-model写法后 emit触发事件必须为update: + props
  15. context.emit('update:value', !props.value)
  16. // this.$emit()
  17. }
  18. return {toggle}
  19. }
  20. }
  21. </script>