mint-ui中的cell无法绑定原生事件
<mt-cell is-link title="测试" v-on:click.native="test">
      <img slot="icon" src="../../assets/images/icon/credit-card.svg" width="24" height="24">
</mt-cell>

这样才能正常绑定事件test,去掉is-link也可以绑定,如下:

<mt-cell title="测试" v-on:click.native="test">
      <img slot="icon" src="../../assets/images/icon/credit-card.svg" width="24" height="24">
</mt-cell>


原因如下:

Vue.js官方文档中:

https://cn.vuejs.org/v2/guide/components-custom-events.html#将原生事件绑定到组件

给组件绑定原生事件

有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 v-on 的修饰符 .native。例如:

<my-component v-on:click.native="doTheThing"></my-component>

 

进一步解释,原生就类似于你直接用

$element.addEventListener(click, callback);


绑定事件。

router-link会阻止click事件,你可以试试只用click不用native,事件是不会触发的。而a标签不会阻止。

通俗点,vue 自己定义的标签 <router-link> 还有 组件<my-vue-template/> 没有点击事件,H5不论什么标签,天生就有点击事件。加上 .native就变身H5标签。

说白了,意思就是当你给一个vue组件绑定事件时候,要加上native!如果是普通的html元素!就不需要。


补充:

<div id="root">
  <child @click="handleClick"></child>
</div>
Vue.component('child',{
  template:'<div @click="handleChildClick">content</div>',
  methods: {
    handleChildClick(){
      alert('click child')
      this.$emit('click')
    }
  }
})
let vm = new Vue({
  el: '#root',
  methods: {
    handleClick(){
      alert('click')
    }
  }
})

当我给一个组件绑定一个事件的时候,实际上这个事件绑定的是自定义的事件,也就是你真正的鼠标点击触发的事件,并不是我绑定的click事件,如果想触发自定义的click事件,在子组件里对元素进行事件绑定,这个事件才是真正的原生事件。


在元素上绑定的事件,监听的是原生事件,在组件上绑定的事件,监听的是自定义事件,需要用this.$emit()来触发。


参考:

https://cn.vuejs.org/v2/guide/components-custom-events.html#将原生事件绑定到组件

https://segmentfault.com/a/1190000018120443

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
WordPress 分页
JavaScript 数组
Nine 主题
WordPress 添加 Favicon 图标的方法
Express 使用 body-parser 处理 HTTP 请求
JavaScript class 的 this 指向
Git 从远程仓库拉取代码覆盖本地代码
JavaScript URL 对象