【前端】自动回复点击生成新的自动回复:下发html在前端生成dom,点击调用方法

news/2024/9/10 14:25:54 标签: 前端, html

场景

自动回复会下发内容和链接,点击链接会自动回复新的内容,像淘宝等的自动回复。
服务端下发的是html标签,如:

"<div class="link" @click="autoReply(1,2)">aaaaa</div>"

下发的内容已经写了类和方法,并传入参数。

目标:实现点击下发的链接调用对应方法,完成自动回复。

技术栈:svelte。

代码

下发的链接有link类,因此在全局写link的css样式:

 .link {
   color: #4ea1db;
 }

由于下发的链接不会经过svelte编译器,因此不会点击后自动触发方法,需要手动去调用。

直接获取链接的DOM元素,在afterUpdate生命周期(即DOM更新后)添加点击自动回复的事件。注意,在添加之前需要将之前的事件监听清空。否则会点一次触发多次。

handleAutoReply 中获取参数,手动调用getAutoReply方法。

在销毁页面onDestroy时移除事件监听。

  afterUpdate(() => {
    autoLink = document.getElementsByClassName('link-style');
    
	for (let i = 0; i < autoLink.length; i++) {
	  autoLink[i].removeEventListener('click', handleAutoReply);
	}

    // 添加点击自动回复
    for (let i = 0; i < autoLink.length; i++) {
      autoLink[i].addEventListener('click', handleAutoReply);
    }
  });

  //   处理下发的html中的点击事件
  const handleAutoReply = (event) => {
    const replyValue = event.target.attributes[1].value; //eg:getAutoReply(809,6)
    const matches = replyValue.match(/\d+/g);
    const id = Number(matches[0]); // 809
    const key = Number(matches[1]); // 6
    getAutoReply(id, key);
  };

  onDestroy(() => {
    // 移除事件监听器
    for (let i = 0; i < autoLink.length; i++) {
      autoLink[i].removeEventListener('click', handleAutoReply);
    }
  });

// 调取自动回复的接口
 const getAutoReply = (id,key)=>{ ... }

getAutoReply 方法返回自动回复的内容,把它加到自动回复的列表中。由于是svelte,需要显式地更新列表。

$ :list =[] // 响应式的声明

// getAutoReply拿到结果后
list =[...list] // 显式更新列表

HTML中,如果是下发带标签的自动回复,则:

html">{@html listItem.content}

http://www.niftyadmin.cn/n/5640966.html

相关文章

如何修复软件中的BUG

笔者上一篇博文《如何开发出一款优秀的软件》主要讲了如何开发一款优秀的软件及相应的必要条件。但对一个已上线&#xff0c;已经成型的产品&#xff0c;该如何解决存在的bug呢&#xff1f;这是本文要阐述的内容。 在这里&#xff0c;首先说一下bug的种类及bug严重程度分类&…

触想内嵌式工业一体机应用于智能检票机改善旅游体验

一、行业发展背景 每年下半年&#xff0c;暑假、中秋、国庆总是接踵而至&#xff0c;随之而来的出游高峰一波接一波。凶猛需求之下&#xff0c;各地景区、游乐园客流压力加大&#xff0c;特别在检票环节&#xff0c;人工检票效率低、秩序混乱&#xff0c;导致常常出现检票口人山…

基于SSM+MySQL的医院在线挂号系统

系统背景 在当前数字化转型浪潮的推动下&#xff0c;医疗服务行业正经历着前所未有的变革。随着人口老龄化的加剧、患者就医需求的日益增长以及医疗资源分布不均等问题的凸显&#xff0c;传统的就医模式已难以满足患者对于便捷、高效医疗服务的需求。因此&#xff0c;构建一套基…

golang学习笔记02——gin框架及基本原理

目录 1.前言2.必要的知识3.路由注册流程3.1 核心数据结构3.2 执行流程3.3 创建并初始化gin.Engine3.4 注册middleware3.5 注册路由及处理函数&#xff08;1&#xff09;拼接完整的路径参数&#xff08;2&#xff09;组合处理函数链&#xff08;3&#xff09;注册完成路径及处理…

微服务之间相互调用

使用RESTful API进行微服务调用 服务A&#xff08;调用方&#xff09; 创建Spring Boot项目&#xff1a; 使用Spring Initializr创建一个新的Spring Boot项目&#xff0c;并添加以下依赖&#xff1a; Spring Web: 用于构建Web应用和RESTful API。Spring Boot DevTools: 提供开…

Node.js的express模块

一、express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架 官方网址&#xff1a;https://www.expressjs. com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用&#xff08;HTTP …

C语言:刷题笔记

一、进制转换 链接&#xff1a;小乐乐与进制转换_牛客题霸_牛客网 描述 小乐乐在课上学习了二进制八进制与十六进制后&#xff0c;对进制转换产生了浓厚的兴趣。因为他的幸运数字是6&#xff0c;所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。 输入描述&a…

MySQL 自学笔记(入门基础篇,含示例)

目录 一、基础1.变量2.运算符 二、数据库与表1.创建数据库2.表的增删与修改&#xff08;1&#xff09;表的创建与删除&#xff08;2&#xff09;表的修改&#xff08;3&#xff09;其他指令 3.属性约束4.数据操作&#xff08;1&#xff09;数据更新&#xff08;2&#xff09;数…