VUE div click无效的问题及解决

目录
  • VUE div click无效
  • @click事件无效?@click.native中.native的含义和使用
    • 记录@click绑定事件的一个坑
  • 总结

VUE div click无效

每逢半年  总要遇到一个前端诡异问题,花了个把小时才解决,记录一下

    <div v-else-if="item.type ===7" class="left-title bgc-opacity" :style="styleObj" @click="changeliveisResize(true)">
      <!-- 字幕 -->
      <div v-if="!item.text">
        <div class="text-son">{{ $t('program.caption') }}</div>
      </div>
      <div v-else>
        <div class="left-align-text caption-text" :style="{fontSize: item.fontSize + 'px', color: item.fontColor}"> {{ item.text }} </div>
      </div>
    </div>

当@Click写在里面div时 无反应  写在外面有反应

当@Click写在里面DIV时 把外面的:style="styleObj"移出  也有反应

@click事件无效?@click.native中.native的含义和使用

记录@click绑定事件的一个坑

问题描述:

今天开发的时候,给组件绑定了@click事件,但是事件却没有执行。

代码如下:

<template>
<div>
    <span>父组件页面</span>
     <search @click="onSubmit"></search>
</div>
</template>
<script>
methods: {
    onSubmit() {
        alert('show')
    }
}
</script>

子页面search.vue

<template>
    <div>
        <button>点击查找</button>
    </div>
</template>
<script>
</script>

search是我自己封装的一个组件,问题就出在这儿,search是子组件,想要直接在父组件触发click方法。

方案一:不改变子组件页面的话,父页面就必须这么写

<search @click.native="onSubmit"></search>

方案二:

父页面

<template>
<div>
    <span>父组件页面</span>
     <search @click="onSubmit"></search>
</div>
</template>
<script>
methods: {
    onSubmit() {
        alert('show')
    }
}
</script>

子页面search

<template>
    <div>
        <button @click='handleClick'></button>
    </div>
</template>
<script>
methods: {
    handleClick() {
        this.$emit('click')
    }
}
</script>

至于为什么加上.native就可以直接触发事件,是因为使用.native之后父级组件可以像处理原生的DOM事件一样通过 v-on 监听子组件实例的任意事件(@即为v-on:的简写),如果不加natvie,会认为监听的是来自子组件search.vue自定义的事件,然而子组件内也没有使用$emit()来将子组件的触发事件抛出,因此onSubmit()方法没有执行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue开发移动端使用better-scroll时click事件失效的解决方案

    最近使用vue学习开发移动端的项目,使用了better-scroll插件做滚动. 在引入better-scroll的组件中使用@click事件的时候,点击事件失效,v-on:click.v-bind:click.@click.native都不行,试了一下@touchstart是却是可以的,发现better-scroll的配置中没有设置click:true,设置过之后click事件成功. 后来在使用vuex的时候一直报 [vuex] unknown mutation type: changeCit

  • 解决vue组件中click事件失效的问题

    最近使用vue学习开发移动端的项目,使用了bette-scroll插件做滚动.在引入better-scroll的组件中使用@click事件的时候,点击事件失效,v-on:click.v-bind:click.@click.native都不行,试了一下@touchstart是却是可以的,发现better-scroll的配置中没有设置click:true,设置过之后click事件成功. 后来在使用vuex的时候一直报"[vuex] unknown mutation type: changeCity&

  • vue自定义组件@click点击失效问题及解决

    目录 自定义组件@click点击失效 问题描述 原因分析 问题解决 @click不起作用,同时报错 自定义组件@click点击失效 问题描述 自定义组件在使无法,无法绑定原vue文件内的原生click事件 原因分析 根据查询vue官方文档,得知click事件作用于组件内部,如果组件内没有写click事件,便会无响应. 问题解决 1.参照官方文档,可以用@click.native=“click”解决 2.可以用:将事件传递至组件内,也符合组件间的单向数据流,我就是这样解决的 主组件写法: 被调用组

  • 解决vue 退出动画无效的问题

    遇到一个问题:给模态框加入退出动画,进入的动画效果是有的,可是退出的动画就没有了. 写个简单的结构: <div class="<strong>mask</strong>" v-show="warning"><br> <transition name="warning"><br> <div v-show="warning" class="wa

  • 解决vue scoped scss 无效的问题

    今天遇到scoped内部的scss设置无效,解决办法如下: /deep/ <style scoped lang="scss"> .position-el-steps { /deep/ .el-step.is-vertical { .el-step__description { margin-top: -20px; } .el-step__line { border-left: 2px dashed #c0c4cc; background-color: transparent

  • vue data对象重新赋值无效(未更改)的解决方式

    vue存在一个比较深的问题就是data中的属性对象如果在初始化的时候为{},那么后面在方法用普通的js语法赋值会无效 这里是data data() { return { model: {} }; } 这里是方法里的普通赋值 afterUpload(response) { this.model.icon = response.url; } 普通方法会无效,需要使用vue提供的方法重新显示声明 afterUpload(response) { this.$set(this.model,'icon',r

  • vue使用Echarts设置数据无效问题记录及解决方法

    目录 场景: 遇到的问题: 最终解决方案: 小结: 场景: 做一个动态的柱状图,模拟socket效果,如图所示: 遇到的问题: 元数据格式是这样的: config: { data: [ { name: '义乌市', value: 169 }, { name: '东阳市', value: 123 }, { name: '武义县', value: 98 }, { name: '兰溪市', value: 75 }, { name: '金东区', value: 66 }, ], colors: ['#e

  • vue props传值失败 输出undefined的解决方法

    如果在prop中传的值为一个没有使用特殊命名规则的变量如:(type),可以顺利传值: <code class="language-html"><div id="app"> <test :type="type"></test> </div> Vue.component("test", { props: ['type'], template: '<div @cli

  • vue v-on:click传递动态参数的步骤

    最近项目中要为一个循环列表动态传送当前点击列的数据,查了很久资料也没有一个完美的解决方案, 新手只能用vue的事件处理器与jquery的选择器做了一个不伦不类的方案,居然也能解决这个问题,作此记录留待以后会有更好的方法解决这个事情 需求:根据每列传递的参数,决定弹窗后面是积分够了去直接购买还是不够需要去转换 二.页面代码[无法可传的参数,我把它放进了一个自定义标签date-id] <div class="ticket-main"> <a href="java

  • vue 实现click同时传入事件对象和自定义参数

    仅仅传入自定义参数 HTML <div id="app"> <button @click="tm(123)">ddddd</button> </div> JS代码 new Vue({ el:'#app', methods:{ tm:function(e){ console.log(e); } } }) 仅仅传入事件对象 HTML <div id="app"> <button @cl

  • vue页面加载闪烁问题的解决方法

    v-if 和 v-show 的区别 v-if只会在满足条件时才会编译,而v-show不管是否满足条件始终会编译,v-show的显示与隐藏只是简单的切换CSS的display属性. 也就是说,在使用v-if时,若值为false,那么页面将不会有这个html标签生成.而v-show:不论其值是false还是true,html元素都会存在,只是简单的切换css的display属性. 使用场景 一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗.因此,如果需要频繁切换 v-sho

  • vue渲染时闪烁{{}}的问题及解决方法

    v-if和v-show可能是日常开发中最常用的两个指令,虽然看上去两者功能是类似的,但是两者还是存在很大区别的.  v-if与v-show区别: 在切换 v-if 块时,Vue.js 有一个局部编译/卸载过程,因为 v-if 之中的模板也可能包括数据绑定或子组件.v-if 是真实的条件渲染,因为它会确保条件块在切换当中合适地销毁与重建条件块内的事件监听器和子组件. v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做--在条件第一次变为真时才开始局部编译(编译会被缓存起来). 相比之下,

  • vue代理和跨域问题的解决

    一.安装vue-resource插件 cnpm install vue-resource --save 在根目录下的package.json检查一下插件的版本 在rourer-index.js下引入文件 import Resource from 'vue-resource' Vue.use(Resource) 引入vue-resource后,可以基于全局的Vue对象使用http,也可以基于某个Vue实例使用http 参考链接 二.安装axios插件 cnpm install --save axi

随机推荐

其他