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

场景

自动回复会下发内容和链接,点击链接会自动回复新的内容,像淘宝等的自动回复。
服务端下发的是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 listItem.content}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karshey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值