vue 关于对 js 事件失效的补充(外部资源加载问题)

vue 关于对 js 事件失效的补充

前言

前几天遇到了amazeui的 js 事件失效问题,写了一篇文章做了一些分析

链接: https://blog.csdn.net/qq_41399901/article/details/88778835

目前…

而在最近看有关 amazeui 组件的问题时,在官网发现了官方给出的关于js 事件失效的答复:
官方显然,之前的分析思路是正确的,动态插入的 dom 事件是不会绑定事件的。

这也就导致了在使用 vue-router 时, 跳转后的页面部分没有相应的绑定事件,从而导致事件失效。

解决办法

amazeui 官方的意思是在插入新的 dom 时, 要同时初始化事件,绑定到 dom 上。

所以,我们可以根据官方给出的 初始化组件 函数,对 js 插件进行初始化。

之前我想到过两种方法:


1.添加一个刷新页面的方法
2.在跳转页面后重新加载 amaze.min.js


这两种方法都有很大的缺点——会消耗很多资源
仅仅为了一个按钮的样式、一个下拉框的下拉 显然是不值得的。

鉴于 amazeui 官方的答复,暂时想出一个折衷一点的方案,即再 初始化组件

问题

但问题也随之而来,vue 是一个构建数据驱动的 web 界面的渐进式框架,mvvm 模型的它并不能直接操作 dom 元素,而且由于 amazeui 是基于 jquery 的,要是想要在组件中重新初始化组件,不但要用vue不推荐的对 dom 元素进行操作 还要引入 jquery 。


我所想到的方法是这样的:
1.先建一个 js 文件,在其中初始化组件。
2.在跳转页面时,用 methods 或者 mounted 创建 script 标签(和原来的第二种方法相同)

实现起来是这样的
add
首先新建一个 js 文件,在其中加入初始化函数

然后
大苏打
在需要重新初始化的组件里加入代码,引入刚刚创建的 js 文件


又想到一个新方法…
将组件初始化代码放到一个 js 文件里面, 再用vue-router 的beforeEach 钩子,在每次跳转页面时,引入 js 文件。

router.beforeEach((to, from, next) => {
  if (to.matched.some(r => r.meta.requireAuth)) {
    if (store.state.token) { // 登陆的 token..
      const s = document.createElement('script')  // 插入代码
      s.type = 'text/javascript'
      s.src = '/static/js/add.js'
      document.body.appendChild(s)
      next()
    } else {
      next({
        path: '/login',
        query: {
          redirect: to.fullPath
        }
      })
    }
  } else {
    next()
  }
})

或者用 afterEach

router.afterEach((to, from) => {
	const s = document.createElement('script')
	s.type = 'text/javascript'
	s.src = '/static/js/add.js'
	document.body.appendChild(s)
	next()
)}

大功告成…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值