关于第二种自定义组件写法的疑惑,麻烦老师解答

来源:3-9 vue如何自己实现v-model

THEEND0123

2021-02-25

父组件

<template>
<div>
<Test v-model="val"/>
{{val}}
</div>
</template>
<script>
import Test from './Test.vue'
export default {
  data(){
    return {
      val:'test value'
    }
  },
components:{
Test
},
}
</script>

子组件

<template>
<input :value="testVal"  @input="handleChange"/>
</template>
<script>
export default {
props:['val'],
data(){
  return {
    testVal:this.val
  }
},
watch:{
  val(propsVal){
    this.testVal = propsVal
  }
},
methods:{
  handleChange(e){
    this.testVal =e.target.value 
    this.$emit("input",this.testVal)
  }
},
}
</script>

老师,您好,不太理解this.$emit("input",this.testVal)在这里的作用,又重新触发input事件,再执行handleChange事件处理函数,那不死循环了?这怎么传回父组件val啊?

写回答

1回答

双越

2021-02-25

感觉你对 Vue 的 this.$emit 还不太了解。this.$emit('xxx') 就是触发父组件的事件。

0
6
邓男子
回复
双越
我看到子组件里emit出来一个change1事件,当时父组件没有去用@change1,为什么还能实现传值
2021-06-03
共6条回复

前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4694 学习 · 1667 问题

查看课程