美文网首页
将原生事件绑定到组件

将原生事件绑定到组件

作者: 时光经年 | 来源:发表于2018-12-20 10:08 被阅读0次

    1在一个组件的根元素上直接监听一个原生事件 加.native (注意只能绑定在根元素上)

    <base-input   @focus.native="onFocus"></base-input>
     Vue.component('base-input',{
          template:` 
              <input  /> 
          `
     })
    

    2.如果你想绑定不是根元素上的,需要换种方法要用到 vm.$listeners

    (包含了父作用域中的 v-on 事件监听器 ,它可以通过 v-on="$listeners" 绑定到你要绑定的标签上,特别注意不包含 .native)

      <base-input  v-model='wcValue'   @focus="onFocus"></base-input>
    {{wcValue}}
     
      Vue.component('base-input', {
          inheritAttrs: false,
          props: ['value'],
          computed: {
            inputListeners: function () { 
              var vm = this
              // `Object.assign` 将所有的对象合并为一个新对象
              return Object.assign({},
                // 我们从父级添加所有的监听器
                this.$listeners,
                // 然后我们添加自定义监听器,
                // 或覆写一些监听器的行为
                {
                  // 这里确保组件配合 `v-model` 的工作
                  input: function (event) {
                    vm.$emit('input', event.target.value)
                  }
                }
              )
            }
          },
          template: `
            <label> 
              <input 
                v-bind:value="value"
                v-on="inputListeners"
              >
            </label>
          `,
          created:function(){ 
            console.log(this.inputListeners)
          }
        })
    
    var vm = new Vue({
      el:'#app',
      data:{
          wcValue:''
      },
      methods:{
        onFocus:function(){
          console.log(1111)
        }
      }
    })
    
    

    相关文章

      网友评论

          本文标题:将原生事件绑定到组件

          本文链接:https://www.haomeiwen.com/subject/ujmekqtx.html