Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
358 views
in Technique[技术] by (71.8m points)

用$emit('input',arguments)改变v-model上父组件的值是怎么实现的?

<div id="app">
    <custom-input v-model="father"></custom-input>
    <span>{{father}}</span>
  </div>
  <script>
    Vue.component('custom-input', {
      template: `
          <div @click='add'>add</div>
          `,
      data(){
        return{
          a:1
        }
      },
      methods: {
        add() {
          this.$emit('input',this.a++)
        }
      }
    })
    new Vue({
      el: "#app",
      data: {
        father: 'when you click add ,here will change'
      },
    })
  </script>

如上代码为什么传入参数能直接改变父组件上的father值,v-model内部原理是怎么样的?

这是在input标签上使用v-model
<input v-model="father">  
 等价于
<input v-bind:value="father" v-on:input="father = $event.target.value" >

我写的demo用这个原理解释不通吧,此时更像是

<custom-input v-bind:value="father" v-on:input="father = 子组件传的参数" ></custom-input>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
this.$emit('input',this.a++)

触发input事件,cusomter-input监听了input事件,$event.target就是cusomter-input组件实例,value就是a,father被更新


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...