持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签

增加复制按钮后的界面是这样的

在这里插入图片描述

在这里插入图片描述

代码如下:

<template>
	<view>
		<x-header></x-header>
		<view class="" v-if="article_info">
			<view class="kuai bgf">
				<view class="ac fs26">
					<img src="@/static/logo.png" class="w60 h60 br60 mr10" alt="" />
					<view class="ac ">
						<view class="mr10">
							陈老师
						</view>
						<view class="">
							<up-tag size="mini" text="管理员" type="success"></up-tag>
						</view>
					</view>
				</view>
				<view class="mt10">
					<span class="fs24" style="color:#8f8fa6 ;">
						发布时间 {{article_info.create_time }} 阅读量 {{article_info.read }} 评论数 0
					</span>
				</view>
			</view>
			<view class="p20" @click="copyText(article_info.content)">
				<up-button type="success" text="复制内容"></up-button>
			</view>
			<view class="kuai bgf ac wrap">
				<up-parse :content="article_info.content"></up-parse>

				<!-- <rich-text :nodes="article_info.content"></rich-text> -->
			</view>
		</view>

	</view>
</template>

<script>
	import {
		getArticle
	} from '@/config/api.js'
	export default {
		data() {
			return {
				article_info: null
			}
		},
		async onLoad(e) {
			this.$showLoading()
			const res = await getArticle({
				id: e.id
			})
			if (res.code == 200) {
				uni.setNavigationBarTitle({
					title: res.data.title // 设置页面的标题
				});
				this.article_info = res.data
			} else {
				uni.navigateBack()
			}

		},
		methods: {
			removeHtmlTags(html) {
				return html.replace(/<[^>]*>/g, ''); // 使用正则去掉所有HTML标签
			},
			copyText(richText) {

				const textToCopy = this.removeHtmlTags(richText); // 去掉HTML标签
				uni.setClipboardData({
					data: textToCopy, // 设置剪贴板内容为纯文本
					success: function() {
						uni.showToast({
							title: '复制成功',
							icon: 'success'
						});
					}
				});
			}
		},

	}
</script>

<style>

</style>

代码解释

由chatGPT代劳

这段代码是一个 UniApp 页面,展示了一篇文章的详细内容,包括标题、发布信息、内容、复制内容等功能。下面是对每个部分的详细解释:

1. 模板部分 (<template>)

<template>
  <view>
    <x-header></x-header> <!-- 自定义组件,通常是页面头部 -->
    
    <!-- 文章信息展示部分 -->
    <view v-if="article_info">
      <!-- 文章头部信息区域 -->
      <view class="kuai bgf">
        <view class="ac fs26">
          <img src="@/static/logo.png" class="w60 h60 br60 mr10" alt="" />
          <view class="ac">
            <view class="mr10">陈老师</view>
            <view>
              <up-tag size="mini" text="管理员" type="success"></up-tag>
            </view>
          </view>
        </view>
        
        <view class="mt10">
          <span class="fs24" style="color:#8f8fa6;">
            发布时间 {{ article_info.create_time }} 阅读量 {{ article_info.read }} 评论数 0
          </span>
        </view>
      </view>
      
      <!-- 复制文章内容按钮 -->
      <view class="p20" @click="copyText(article_info.content)">
        <up-button type="success" text="复制内容"></up-button>
      </view>
      
      <!-- 文章内容展示区域 -->
      <view class="kuai bgf ac wrap">
        <up-parse :content="article_info.content"></up-parse>
        <!-- 使用 up-parse 组件解析并显示文章内容 -->
      </view>
    </view>
  </view>
</template>
详细解释:
  • <x-header></x-header>: 这是一个自定义组件,用来显示页面的标题栏或头部信息。

  • <view v-if="article_info">: 这个 view 容器只有在 article_info 不为空时才会显示,这样可以避免页面渲染空白内容。

  • 文章头部信息

    • 包括一个头像(<img src="@/static/logo.png">)、作者名字(陈老师)和角色标签(管理员,通过 up-tag 组件实现)。
    • 显示文章的创建时间(article_info.create_time)、阅读量(article_info.read)和评论数(固定为 0,但是实际上你可能会从服务器获取评论数)。
  • 复制文章内容按钮

    • 使用 up-button 组件,并在点击时调用 copyText 方法,将文章的内容复制到剪贴板。
  • 文章内容显示

    • 使用 up-parse 组件来解析 article_info.content 中的 HTML 内容并展示出来。up-parse 是 UniApp 中一个常用的组件,通常用于解析和渲染富文本内容。

2. 脚本部分 (<script>)

<script>
  import { getArticle } from '@/config/api.js'; // 引入获取文章的 API
  
  export default {
    data() {
      return {
        article_info: null  // 初始化 article_info 为 null
      };
    },
    
    async onLoad(e) {
      this.$showLoading();  // 显示加载中效果
      
      // 通过 API 获取文章数据
      const res = await getArticle({
        id: e.id  // 获取传递的文章 ID 参数
      });

      if (res.code == 200) {
        // 如果请求成功,设置页面标题并将返回的数据赋值给 article_info
        uni.setNavigationBarTitle({
          title: res.data.title // 设置页面的标题
        });
        this.article_info = res.data; // 保存文章数据
      } else {
        // 如果请求失败,返回上一页
        uni.navigateBack();
      }
    },
    
    methods: {
      // 去掉 HTML 标签,返回纯文本
      removeHtmlTags(html) {
        return html.replace(/<[^>]*>/g, ''); // 使用正则去掉所有 HTML 标签
      },

      // 复制文章内容到剪贴板
      copyText(richText) {
        const textToCopy = this.removeHtmlTags(richText); // 去掉 HTML 标签,保留纯文本
        uni.setClipboardData({
          data: textToCopy,  // 将纯文本内容设置到剪贴板
          success: function() {
            // 显示复制成功的提示
            uni.showToast({
              title: '复制成功',
              icon: 'success'
            });
          }
        });
      }
    }
  };
</script>
详细解释:
  • data():

    • article_info: 这是用于存储文章数据的变量,初始值为 null,文章数据会在后续的 API 请求中获取并赋值。
  • onLoad(e):

    • onLoad 是页面生命周期函数之一,页面加载时会调用此方法。
    • this.$showLoading() 显示一个加载提示。
    • getArticle 是从 @/config/api.js 文件中引入的 API 请求函数,调用该函数获取文章数据,并传递文章的 id
    • 请求成功后,通过 uni.setNavigationBarTitle() 设置页面标题为文章的标题。
    • 将获取的文章数据 res.data 保存到 article_info 中。
    • 如果请求失败,则使用 uni.navigateBack() 返回上一页。
  • removeHtmlTags(html):

    • 这是一个用于去掉 HTML 标签的函数,使用正则表达式 /<[^>]*>/g 来匹配并去除文本中的所有 HTML 标签,只保留纯文本内容。
  • copyText(richText):

    • 这个方法用于将文章内容复制到剪贴板。
    • removeHtmlTags 方法用来去除文章中的 HTML 标签,只留下纯文本内容。
    • 使用 uni.setClipboardData() 将纯文本内容设置到剪贴板中。
    • uni.showToast() 显示一个成功的提示,表示内容已成功复制。

3. 样式部分 (<style>)

<style>
</style>
  • 这里目前没有定义样式,如果需要自定义页面的样式,可以在这里添加对应的 CSS。

总结:

  • 页面通过 getArticle API 获取文章数据并展示在页面上,包括文章标题、发布时间、阅读量等信息。
  • 页面提供了一个按钮,点击后可以将文章内容复制到剪贴板,并显示成功提示。
  • 文章内容中的 HTML 标签会被去除,只保留纯文本内容供复制使用。
  • 页面通过 onLoad 生命周期函数获取传递的参数并加载文章数据。

整体来说,这段代码的主要功能是展示文章详情,并允许用户复制文章内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

启动虚拟机中客户机后导致电脑蓝屏的解决办法

不考虑重新安装虚拟机的解决办法有两种&#xff1a; vmx文件破损时使用 1&#xff09;删除CentOS 64-bit.vmx文件 2&#xff09;打开vmware-0.log文件&#xff0c;找到CONFIGURATION 和 USER DEFAULTS 并把这两个之间的内容拷贝出来 删除框出来的部分&#xff0c;复制框出来的…

Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析 1. CBOW模型概述 CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说&#xff0c;给定当前单词的上下文单词&#xff0c;通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。 2. 模型结构 CB…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

MySql字段的值是以逗号隔开的另一个表的主键关联查询

查询sql SELECT s.student_id, s.name, c.name as course_name FROM student s INNER JOIN course c ON FIND_IN_SET(c.course_id, s.course_id) > 0 WHERE 1 1;相似sql -- 翻译&#xff08;需要带条件&#xff0c;可用于字典翻译&#xff0c;但条件需要注意唯一性&#…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计

据悉&#xff0c;QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间&#xff0c;QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验&#xff08;微机原理与接口技术题解及实验指导&#xff0c;吴宁版本13章&#xff09;&#xff0c;中间出了挺多问题&#xff0c;解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出&#xff0c;只好把子电路拿…

外部flash烧写算法学习笔记(一)

一&#xff0c;STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二&#xff0c;QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了&#xff0c;含MDK下载算法制作和STM32CubeProg下载算法制作 …

在centos上编译安装opensips【初级-默认安装】

环境&#xff1a;centos9 last opensips3.2 dnf update -y dnf install -y gcc make git automake libtool pcre-devel libxml2-devel \libcurl-devel postgresql-devel \bzip2-devel zlib-devel ncurses-devel libuuid-devel \libpcap-devel # 有报错的直接删除cd /usr/lo…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…

鸿蒙参考文档和问题记录

本文用于记录鸿蒙使用过程中的问题和相关参考文档 问题记录 1. 兼容性测试套件问题 ActsStartAbilityForResultNoTargetBundleListStageTest套件测试失败&#xff1a;模块FreeInstall 技术资料 1. HarmonyOS应用如何打包HAP并安装到真机 HarmonyOS应用如何打包HAP并安装到真…

虚幻基础-1:cpu挑选(14600kf)

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 ue非常吃cpu拉满主频打开项目编写蓝图运行原因 时间长 关于压力测试 本文以14600kf为例&#xff0c;双12购入&#xff0c;7月份产。 ue非常吃cpu 经本人测试&#xff0c;ue是非常吃cpu的。 拉满主频 无论任何时间…

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践

在现代 Web 开发中&#xff0c;前后端分离的架构已经成为主流。本文将分享如何使用 Spring Boot 和 Vue.js构建一个全栈购物平台&#xff0c;涵盖从后端 API 开发到前端页面实现的完整流程。 1. 技术栈介绍 后端技术栈 JDK 1.8&#xff1a;稳定且广泛使用的 Java 版本。 Spring…

nginx离线安装部署详解(附一键启动 环境变量)

学习nginx的过程中 看了许多帖子 但是都没有全套的部署 所以想自己写一篇帖子 正好也可以给后续想要学习nginx的人参考一下 当时在学习的时候总是在想 为什么要学习离线安装 这玩意不是一个dnf命令不就完事了吗 在后续的学习中才发现 原来在实际环境中许多机器都是离线…