vue button的@click方法无效钩子函数没有执行问题

目录
  • Vue项目中使用button绑定click事件
    • 事件无法触发methods中的方法解决办法
    • 跨域问题
  • userData is not defined
    • Vue的第四个bug 钩子函数(mounted/created)
    • Vue的第五个bug
  • vue @click失效问题
    • 贴代码(直接截图)
    • 解决方法

Vue项目中使用button绑定click事件

事件无法触发methods中的方法解决办法

事故还原

小胖做完公司的项目,老大看着小胖疲惫的脸庞,有点心疼小胖,就给小胖放了三天假,没有给小胖新的需求。小胖平常主要是写的后端,但是最近跟小顺子有点聊技术,小顺子经常把Vue挂在嘴边,小胖有点不服气,正好最近也有时间,打算利用这三天把Vue入个门,但是刚开始就把小胖给难住了,小胖写了一个button,并绑定了click点击事件,但是发现无法触发methods中的but方法,异常提示信息大致的意思是but_ajax未定义。

浏览器console显示异常信息

but_ajax is not defined
    at HTMLButtonElement.onclick

出了bug但是小胖的内心毫无波动,脑袋里想起了公司架构师老王经常说的一句话,遇到bug不要慌,解bug才是程序员最快的成长方式(但是下面遇到了三个基础性的错误小胖还是有点尴尬的)

端口绑定异常,这个异常说明就是端口已经被绑定了(后端是我之前写好的,我准备将端口改成4200,但是4200已经在运行angular项目)

java.net.BindException: Address already in use: bind

跨域问题

这个项目前端的路径是localhsot:63342 ,然后后端的路径的localhost:28089 ,前端发送ajax的时候url路径需要带上接口,这个是跨域必须的,然后后端需要配置跨域信息(添加注解@CrossOrigin(origin={“前端的url”}),或者编写一个config类)

vue button (特别注意) 犯了一个很沙雕的错误,浪费一个小时

vue 中button 的点击事件

<button v-on:click="but_click">发送请求</button>

js 中 button点击事件

<button onclick="but_click">发送请求</button>

刚开始小胖犯了一个很沙雕的错误,在vue的methods中定义一个点击事件的方法,但是在 中 使用的是js的onclick事件,所以就出现找不到method,js的点击事件对应的方法,直接写在script中,放在methods中不会被识别

<script>
    but_ajax = function() {
    $.get(url).then(response => {
        this.tableData = response;
    })
}
</script>

userData is not defined

在 data中定义了 userData ,但是出现异常如下,异常信息说明userData没有定义,但是我们明明在data中定义过了,小胖我思前想后,发现我又写了一个沙雕的bug,userData是vue对象中的data里面定义的,要想使用,必须使用this关键字,this指代的是vue对象。

Uncaught ReferenceError: userData is not defined

Vue的第四个bug 钩子函数(mounted/created)

小胖有一个想法,就是在页面加载的时候,直接发送ajax请求,然后将数据显示在table中(table 是使用的el-table ElementUI的组件),小胖想着钩子函数也是一个method,所以想当然的把created(mounted) 放在methods里面,结果发现没有效果,这个时候小胖想肯定是钩子函数没有执行,应该是没有被浏览器识别,小胖就直接怀疑钩子函数是不是放错位置了,小胖试着将钩子函数(mounted/created)跟el、data、methods放在同一级,然后重新启动项目,效果出来了。

Vue的第五个bug

钩子函数发送ajax获取数据,放回到表单中,这里有一个明显的延时,数据要过将近1s才显示,出现过两次,后面基本上在200ms左右,这里因为我的element.css elementui.js以及vue.js都是在放在本地,不是去请求网络,所以速度稍微快一点。(如果面试问道怎么优化页面响应速度的话,可以说将js,css文件使用min版的,然后使用离线文件,(一般企业开发,开发阶段可能使用网络文件,但是生产环境都是使用离线文件))

小结:写一个简单的vue 按钮,出现了跨域、vue与js的点击事件混用、vue中data的调用,这三个bug,发现对一些基础知识的理解差很多,平常还是需要多敲,多敲确实可以快速成长,但是需要将基础的东西过一遍再去敲,去琢磨才可以事半功倍,看似简单的需求,居然花了两个小时找bug,至此Vue算是迈进了门,但是后面的路还有很长。

vue @click失效问题

鉴于我这只猪花了半天时间重写代码

所以写这篇随笔

纪念我白白逝去半天时光

贴代码(直接截图)

怎么看都没有问题,我这只猪一遍一遍认认真真敲了好多遍

最后找到了问题所在:

页面中使用了better-scroll,自动禁用了click事件,其实之前好像没有这种情况,后续会研究一下的

解决方法

给加个click: true就好了

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

(0)

相关推荐

  • Vue指令的钩子函数使用方法

    在Vue 中可以把一系列复杂的操作包装为一个指令. 什么是复杂的操作? 我的理解是:复杂逻辑功能的包装.违背数据驱动的 DOM 操作以及对一些 Hack 手段的掩盖等.我们总是期望以操作数据的形式来实现功能逻辑. 钩子函数 对于自定义指令的定义,Vue2 有 5 个可选的钩子函数. bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作. inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中).

  • vue中各选项及钩子函数执行顺序详解

    在vue中,实例选项和钩子函数和{{}}表达式都是不需要手动调用就可以直接执行的. vue的生命周期如下图: 在页面首次加载执行顺序有如下: beforeCreate //在实例初始化之后.创建之前执行 created //实例创建后执行 beforeMounted //在挂载开始之前调用 filters //挂载前加载过滤器 computed //计算属性 directives-bind //只调用一次,在指令第一次绑定到元素时调用 directives-inserted //被绑定元素插入父

  • Vue生命周期和钩子函数的详解与经典面试题

    目录 1. vue生命周期 2.钩子函数 2.1 分为4大阶段8个方法: 2.2 初始化阶段 2.3 挂载阶段 2.4 更新阶段 2.5 销毁阶段 面试题: 总结 1. vue生命周期 一组件从 创建 到 销毁 的整个过程就是生命周期 Vue 实例从创建到销毁的过程,就是生命周期.也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期. 2.钩子函数 Vue 框架内置函数,随着组件的生命周期阶段,自动执行,特定的时间点,执行特定的操

  • 解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题

    项目需求:图片加载时,当鼠标滚动至当前图片进行加载并加上上滑特效,实现这个效果需要对文档文档滚动位置和图片的当前位置进行比较.但是mounted 钩子函数执行时img图片并未加载出来也就是占位为空,导致图片位置计算出问题. 解决这个问题,目前想到几种种方法 一.对mounted 钩子函数 中init方法加上延时 mounted: function() { this.$nextTick(() => { // 加上延时避免 mounted 方法比页面加载早执行 或者 对img进行块级化设置宽高进行

  • vue button的@click方法无效钩子函数没有执行问题

    目录 Vue项目中使用button绑定click事件 事件无法触发methods中的方法解决办法 跨域问题 userData is not defined Vue的第四个bug 钩子函数(mounted/created) Vue的第五个bug vue @click失效问题 贴代码(直接截图) 解决方法 Vue项目中使用button绑定click事件 事件无法触发methods中的方法解决办法 事故还原 小胖做完公司的项目,老大看着小胖疲惫的脸庞,有点心疼小胖,就给小胖放了三天假,没有给小胖新的需

  • vue中的生命周期及钩子函数

    目录 1.什么是生命周期 2.vue 的生命周期 3.生命周期钩子函数 1.什么是生命周期 Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载 Dom.渲染 → 更新 → 渲染.卸载等一系列过程,我们称这是 Vue 的生命周期.通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期. 在 Vue 的整个生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册 js 方法,可以让我们用自己注册的 js 方法控制整个大局,在这些事件响应方法中的 this 直接指向的

  • vue中父子组件传值,解决钩子函数mounted只运行一次的操作

    因为mounted函数只会在html和模板渲染之后会加载一次,但是在子组件中只有第一次的数据显示是正常的,所以需要再增加一个updated函数,在更新之后就可以重新进行取值加载,完成数据的正常显示. beforCreate(创建之前) Created(创建之后) beforMount(载入之前) Mounted(载入之后) beforUpdate(更新之前) Updated(更新之后) beforDestroy(销毁之前) Destroyed(销毁之后) activate(keep-alive组

  • 解决vue项目F5刷新mounted里的函数不执行问题

    项目背景 在主文件index.vue中初始化页面相关的操作, 在mounted中放置用户权限判断并更新store中的权限值,当点击相应组件时mounted可正常工作, 但是在用户手动刷新时mounted内的函数并未执行,导致相应组件未获取到权限而显示异常 问题解决 首先,这跟vue生命周期有关,图就不贴了,直接说原因. 当用户f5刷新页面时,整个页面会重新去请求,js的状态变量消失,但是el节点并未重新建立. 因为,mounted是el被新创建的vm.$el替换,并挂载到实例上去之后调用的钩子,

  • 关于vue.js中实现方法内某些代码延时执行

    今天在工作时遇见了某些代码需要延时操作的情况.具体情况为前台grid在执行完增删改操作后需要在增加或者修改弹框点击确定导致弹框消失后,grid内数据能够及时更新以便显示增删改操作后的数据.这里的话使用的是vue.js中的setTimeout函数来解决该问题. 代码如下: var that = this; setTimeout(function () { that.modifyDialogVisible = false; grid.api.reloadData(); },500); 值得注意的是这

  • vue.js动画中的js钩子函数的实现

    在transition中还可以通过设置javascript钩子函数,实现自定义动画效果. 以实现击球效果为例: 击球 代码解析: <!-- 定义js的钩子函数 --> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" > <img v-show="flag" class="ba

  • 详解Vue源码学习之callHook钩子函数

    Vue实例在不同的生命周期阶段,都调用了callHook方法.比如在实例初始化(_init)的时候调用callHook(vm, 'beforeCreate')和callHook(vm, 'created'). 这里的"beforeCreate","created"状态并非随意定义,而是来自于Vue内部的定义的生命周期钩子. var LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mount

  • vue 自定义指令directives及其常用钩子函数说明

    目录 自定义指令directives及常用钩子函数 说明 钩子函数 vue 全局定义 局部定义(vue-cli) 钩子函数里面的参数 vue 自定义指令 directives选项 directives选项中定义 指令 自定义指令directives及常用钩子函数 说明 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令 使用的地方:有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令 钩子函数 inserted:被绑定元素插

  • vue-router中的钩子函数和执行顺序说明

    目录 一:全局导航钩子函数 1.vue router.beforeEach(全局前置守卫) 2.vue router.afterEach(全局后置守卫) 二:路由独享的守卫(路由内钩子) 三:组件内的守卫(组件内钩子) 1.beforeRouteEnter.beforeRouteUpdate.beforeRouteLeave 2.路由钩子在实际开发中的应用场景 vue-router执行顺序 一:全局导航钩子函数 1.vue router.beforeEach(全局前置守卫) beforeEach

随机推荐