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

news2024/11/23 23:44:49

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

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

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

需求说明

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

过往代码

<script>
export default {
  mounted() {
    // OpenInstall
    let _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参数配置,需要自行替换对应的appkey
            onready: 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.coloradmin.cn/o/1798308.html

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

相关文章

建构信任基石:揭秘Web3的去中心化信任体系

在传统的互联网时代&#xff0c;信任往往建立在中心化的机构和第三方平台之上&#xff0c;而这种中心化的信任体系往往面临着数据泄露、信息滥用等问题。然而&#xff0c;随着区块链技术的发展&#xff0c;Web3时代正在向我们展示一种全新的信任体系&#xff0c;即去中心化的信…

C++基础一:代码编译和运行时的调用堆栈

目录 运行时进程的虚拟地址划分 函数调用堆栈 程序编译链接原理 运行时进程的虚拟地址划分 每一个进程的用户空间是私有的&#xff0c;内核空间是共享的 函数调用堆栈 程序编译链接原理

短剧小程序剧场短剧APP定制开发付费短剧之如何搭建?

在构建小剧场短剧影视小程序的过程中&#xff0c;遵循明确的步骤并注意到关键的细节至关重要。 步骤一&#xff1a;寻找适合的源码 1、考虑源码的授权方式&#xff1a;选择开源或商业授权的源码时&#xff0c;要仔细阅读其授权协议&#xff0c;确保它允许你进行修改和商业化利…

《数据结构》

简答题 一、设散列函数H(key)=key MOD 11,用线性探测再散列法解决冲突。对关键字序列{ 13,28,72,5,16,18,7,11,24 }在地址空间为0-10的散列区中建散列表,画出此表,并求等概率情况下查找成功时的平均查找长度。 散列函数为 H(key)=key MOD 11,将关键字序列 {13,28,…

python ---使用python操作mysql ---> pymysql

本章内容: 1:能够完成从MySQL中读取出数据; [重点] 查询: execute()、fetchall() 2:能够将数据写入MySQL数据库。 [重点] 插入数据: execute() sql insert into xxx [掌握]pymysql模块的安装 目标&#xff1a;了解如何安装pymysql模块&#xff1f; 当要使用Python和M…

白嫖游戏指南,Epic喜加一:《漫威暗夜之子》

前言 Epic喜加一&#xff1a;《漫威暗夜之子》《漫威暗夜之子》简介&#xff1a; 前言 接下来有时间会分享一些游戏相关可以白嫖的资源&#xff0c;包括游戏本体、游戏素材资源等等。 有需要的小伙伴可以关注这个专栏&#xff0c;不定期更新哦&#xff01; 专栏&#xff1a;…

C++基础三:类和对象的细节原理

类和对象以及this指针&#xff1a; 概念 面向对象四大特性&#xff1a;抽象&#xff1a;抽象是一种将对象的共同特征提取出来并定义成一个通用模板的过程。类的抽象是指将一个类的共同属性和行为抽象出来&#xff0c;定义一个通用的类模板&#xff0c;而不关注具体的实现细节…

HBuilder中能否使用机器学习

HBuilder中能否使用机器学习? HBuilder是一款由腾讯公司开发的前端开发工具,主要用于快速构建和管理HTML5应用。HBuilder本身是一个专注于Web开发的集成开发环境(IDE),它提供了代码编辑、预览、调试等功能,并且集成了Espresso等移动应用测试框架。HBuilder的核心功能是针…

鸿蒙开发:从入门到实战!

一&#xff0c;默认模版中是容器Row或者Column中添加一个Text文本&#xff0c;我们可以尝试一下修改它的内容和样式&#xff0c;对UI语法有一个初体验&#xff1a; // 文本内容 Text("沉默的闪客") // 字体大小 .fontSize(50) //背…

docker 拉取镜像报错: error pulling image configuration:(kafka)

一、问题描述 docker 拉取镜像报错: error pulling image configuration:&#xff08;kafka&#xff09; ERROR: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/a6/a692873757c06a38279b61…

selenium中, quit 和close的区别

close时 """ close和quit的区别 close关闭当前页 (只是关闭了当前) quit离开整个浏览器 &#xff08;走远了&#xff09; """ from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.co…

Sora简介与其对新媒体短视频行业的影响

Sora简介 官网&#xff1a;https://openai.com/sora 当大家还在沉浸在GPT各种大语言模型的时候&#xff0c;OpenAI 悄无声息地发布了文生视频&#xff08;text-to-video&#xff0c;简称 t2v&#xff09;模型 Sora&#xff0c;这又是一个对AI冲击很大的突破了。Sora可以根据文…

域内攻击 -----> Kerberoasting

在域中&#xff0c;能拿到账户信息得攻击基本上有四个 域内用户枚举域内密码喷洒KerberoastingAS-REP Roasting 对于AS-REP Roasting&#xff0c;我们下一篇文章讲&#xff0c;而前两个&#xff0c;请参考我以前域内横向移动得文章。 那么我们今天就来聊聊Kerberoasting 1.S…

KOL+UGC:解锁品牌内容营销新策略,增强用户参与与互动

在当今数字化时代&#xff0c;品牌与受众之间的互动性和参与感变得至关重要。其中&#xff0c;KOL和UGC&#xff08;用户生成内容&#xff09;的结合&#xff0c;为品牌创造了一种全新的内容创作模式。这种模式不仅增强了内容的吸引力&#xff0c;还极大地提升了品牌与受众之间…

Vue3+vite+Tailwindcss 构建自适应页面 暗黑 高亮 主题(带源码)

资源tailwind css&#xff1a;Tailwind CSS Templates - Tailwind UITailwind CSS Templates - Tailwind UITailwind CSS Templates - Tailwind UI 1、安装tailwindcss npm install -D tailwindcss postcss autoprefixer2、安装配置&#xff1a; npx tailwindcss init -p 运…

商城项目【尚品汇】07分布式锁-2 Redisson篇

文章目录 1 Redisson功能介绍2 Redisson在Springboot中快速入门&#xff08;代码&#xff09;2.1 导入依赖2.2 Redisson配置2.3 将自定义锁setnx换成Redisson实现&#xff08;可重入锁&#xff09; 3 可重入锁原理3.1 自定义分布式锁setnx为什么不可以重入3.2 redisson为什么可…

perccli查看磁盘和Raid卡

1、安装 source /etc/profile chmod 755 /usr/sbin/perccli2、磁盘 perccli /c0 show all3、raid卡 cc perccli /c0 show cc 4、raid卡 pr perccli /c0 show patrolread

【前端Vue】——初识Vue.js

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

漏洞挖掘 | 记一次信息泄露到登入后台

这次是项目上遇到的一个洞&#xff0c;打开页面是一个红红的登录页面 这里就不放图了&#xff0c;浓浓的红色气息~ 老样子抓登录包 虽然是明文传输但是爆破弱口令无果 f12大法&#xff0c;审计源代码&#xff0c;在其中一个js文件中发现了这个接口 拼接URL进行访问 感觉有点东…