【优化过往代码】关于vue自定义事件的运用

【优化过往代码】关于vue自定义事件的运用

  • 需求说明
  • 过往代码
  • 优化思路
  • 优化后代码(Vue2)
  • 遇到问题记录

Vue2官方自定义指令说明文档
Vue3官方自定义指令说明文档

需求说明

  1. 进入某些页面需要加载一些外部资源,并在资源加载完后进行一些处理;
  2. 离开页面时要将资源移除掉

过往代码

<script>
export default {mounted() {// OpenInstalllet _that = this;const s = document.createElement("script");s.type = "text/javascript";s.src = "//web.cdn.openinstall.io/openinstall.js";s.setAttribute("data-callType", "callScript");s.addEventListener("load",() => {var data = OpenInstall.parseUrlParams();console.log(data, "OpenInstall");new OpenInstall({appKey: process.env.appKey, //appkey参数配置,需要自行替换对应的appkeyonready: function () {// ... 一些逻辑},},data);},false);document.head.appendChild(s);},beforeDestroy() {let callScript = document.querySelector("script[data-callType='callScript']");document.head.removeChild(callScript);},
};
</script>

优化思路

定义一个全局指令

  • 指令放在页面根节点上
  • 将资源的加载放到指令里进行,这里把script标签放在绑定元素下(即页面根节点),在页面切换时就不用手动移除script标签
  • 资源加载后的处理逻辑作为指令的绑定值传给传给指令,再由指令去调用

优化后代码(Vue2)

main.js:

// 注册一个全局自定义指令 `v-openinstall`
Vue.directive('openinstall', {inserted: function (el, binding) {const s = document.createElement("script");s.type = "text/javascript";s.src = "//web.cdn.openinstall.io/openinstall.js";s.setAttribute("data-callType", "callScript");s.addEventListener("load",() => {binding.value();},false);el.appendChild(s);console.log(el);},
})

组件内:

<template><div v-openinstall="openinstallHandler"><h1>测试自定义指令</h1><button id="downloadButton">按钮</button></div>
</template><script>
export default {name: "download", // 下载页methods: {openinstallHandler(){console.log('OpenInstall资源加载完成',OpenInstall);var data = OpenInstall.parseUrlParams();console.log(data, "OpenInstall.parseUrlParams()获取链接参数");new OpenInstall({appKey: 'xxx',onready: function () {var m = this,button = document.getElementById("downloadButton");button.onclick = function () {m.wakeupOrInstall({data: {}});return false;};}},data);},go(){this.$router.push({path:'/'})}}
}
</script>

遇到问题记录

开发过程中如果报错 ‘OpenInstall‘ is not defined ,参考 Vue 项目报错:‘XXXXX‘ is not defined ( no-undef ) 解决方法 可以解决
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机数码管显示的计数器,按键按下暂定,再次按下继续。(按键功能使用中断实现)

1、功能描述 数码管显示的计数器&#xff0c;按键按下暂定&#xff0c;再次按下继续。&#xff08;按键功能使用中断实现&#xff09; 2、实验原理 按键与中断&#xff1a;使用单片机的外部中断功能来检测按键动作&#xff0c;实现非阻塞的按键检测。 中断服务程序&…

十四、OpenAI之助手API(Asistants API)

助手API允许你在自己的应用系统中构建一个AI助手。助手有指令&#xff0c;能利用模型、工具和文件响应用户的查询。助手API目前支持3种类型的工具&#xff1a;代码交互&#xff0c;文件搜索和函数调用。 你可以使用助手后台探索助手的能力&#xff0c;或通过这个指南的大纲一步…

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人&#xff0c;编号从 1 开始&#xff0c;每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions&#xff08;directions[i] 为 ‘L’ …

MySQL-数据处理函数

026-distinct去重 select job from emp;加个 distinct 就行了 select distinct job from emp;注意&#xff1a;这个去重只是将显示的结果去重&#xff0c;原表数据不会被更改。 select 永远不会改变原数据 select distinct deptno, job from emp order by deptno asc;027-数…

步态控制之足旋转点(Foot Rotation Indicator, FRI)

足旋转点(Foot Rotation Indicator, FRI) 足旋转点是人形机器人步态规划中的一个关键概念,用于描述步态过程中机器人脚部的旋转和稳定性。FRI 可以帮助确定机器人在行走时是否稳定,以及如何调整步态以保持稳定。下面详细介绍FRI的原理,并举例说明其应用。 足旋转点(FRI…

R语言统计分析——图形的简单示例

参考资料&#xff1a;R语言实战【第2版】 1、示例一 # 绑定数据框mtcars attach(mtcars)# 打开一个图形窗口并生成一个散点图plot(wt,mpg)# 添加一条最优拟合曲线abline(lm(mpg~wt))# 添加标题title("Regression of MPG on weight") # 解除数据框绑定 detach(mtcar…

ES8.13 _bulk报错Malformed content, found extra data after parsing: START_OBJECT解决

在使用elaticsearch8.13.0使用批量创建索引时&#xff0c;根据谷粒中说的es7.9方法去批量操作请求&#xff1a; http://127.0.0.1:9200/shop/_doc/_bulk 注意1&#xff1a;设置header为Content-Type:application/x-ndjson,否则请求报错&#xff1a; {"error": &qu…

量化视频2---miniqmt的使用配置

量化视频2---miniqmt的使用配置 量化视频2---miniqmt的使用配置 (qq.com)

机器学习笔记:focal loss

1 介绍 Focal Loss 是一种在类别不平衡的情况下改善模型性能的损失函数最初在 2017 年的论文《Focal Loss for Dense Object Detection》中提出这种损失函数主要用于解决在有挑战性的对象检测任务中&#xff0c;易分类的负样本占据主导地位的问题&#xff0c;从而导致模型难以…

什么是async/await?

async/await 是 JavaScript 中处理异步操作的一种新方式&#xff0c;它使得异步代码能够以同步的方式书写&#xff0c;从而提高了代码的可读性和可维护性。 async async 是一个函数修饰符&#xff0c;用于声明一个函数是异步的。一个 async 函数总是返回一个 Promise 对象。如…

6.10 c语言

7.1 if-else语句 简化形式 if(表达式)语句块 阶梯形式 if(表达式1)语句块1 else if(表达式2&#xff09;语句块2 嵌套形式 if() if() 语句1 else 语句2 else if() 语句3 else 语句4 表达式一般情况下为逻辑表达式或关系表达式 #include <stdio.h>//从小到大排序,输出顺…

【recast-navigation-js】使用three.js辅助绘制Agent寻路路径

目录 说在前面setAgentTarget绘制寻路路径结果问题其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5上一篇&#xff1a;【recast-navigation-js】使用three.js辅…

linux:centos7升级libstdc++版本到3.4.26

下载&#xff0c;解压 wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip unzip libstdc.so_.6.0.26.zip 复制到【/usr/lib64】&#xff1a; cp libstdc.so.6.0.26 /usr/lib64创建软链接 cd /usr/lib64 sln libstdc.so.6.0.26 libstdc.so.6查看一…

Python | Leetcode Python题解之第144题二叉树的前序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:res list()if not root:return resp1 rootwhile p1:p2 p1.leftif p2:while p2.right and p2.right ! p1:p2 p2.rightif not p2.right:res.append(p1.val)…

机器学习笔记 - LoRA:大型语言模型的低秩适应

一、简述 1、模型微调 随着大型语言模型 (LLM) 的规模增加到数千亿,对这些模型进行微调成为一项挑战。传统上,要微调模型,我们需要更新所有模型参数。这也称为完全微调 (FFT) 。下图详细概述了此方法的工作原理。 完全微调FFT 的计算成本和资源需求很大,因为更新每…

数据中台、数据仓库、数据湖的区别和关联

区别 概念定义 数据中台&#xff1a;是企业级的逻辑概念&#xff0c;体现企业数据向业务价值转化的能力。它距离业务更近&#xff0c;能够更快速地响应业务和应用开发需求&#xff0c;为业务提供速度更快的服务。数据仓库&#xff1a;是为企业所有级别的决策制定过程&#xff…

初识 CAS理论

1、CAS 通过硬件保证比较-更新的原子性&#xff0c;不涉及用户态内核态的切换。 2、CAS 是 CPU 的原子指令(cmpxchg指令)&#xff0c;不会造成数据的不一致问题。Unsafe提供的 CAS 方法底层实现的是 CPU 指令cmpxchg。 3、执行cmpxchg指令&#xff0c;会判断 当前系统是否为多…

Vmess协议是什么意思? VLESS与VMess有什么区别?

VMess 是一个基于 TCP 的加密传输协议&#xff0c;所有数据使用 TCP 传输&#xff0c;是由 V2Ray 原创并使用于 V2Ray 的加密传输协议&#xff0c;它分为入站和出站两部分&#xff0c;其作用是帮助客户端跟服务器之间建立通信。在 V2Ray 上客户端与服务器的通信主要是通过 VMes…

深度学习的点云分类

深度学习的点云分类 点云分类是指将三维点云数据中的每个点或整个点云进行分类的任务。点云数据由大量三维点构成&#xff0c;每个点包含空间坐标&#xff08;x, y, z&#xff09;&#xff0c;有时还包含其他信息如颜色和法向量。点云分类在自动驾驶、机器人导航、3D重建等领域…

bitset 优化DP

bitset bitset 可以 用二进制代替0&#xff0c;1选择情况&#xff0c;也就是把固有的时间复杂度除以64或者32&#xff0c;且常数非常小&#xff0c;有些题目1e8都可以过