详情页 路由传值

news2025/1/15 9:27:52

路由传值获取参数 渲染数据

主页面

<template>
  
    <div class="km">
          <div  v-for="item in items" :key="item.id">
            <div class="title-km" >
               <img :src="item.imageUrl" alt="Image" class="title-km-img">
               <div class="title-km-text">
                <h3 class="title-km-text-p">{{ item.title }}</h3>
                <span class="title-km-text-span ">{{ item.content }}</span>
              </div>
           </div>
           <button class="but" @click="but(item)">详情>></button>
           <el-divider></el-divider>
          </div>
       
        </div> 
  </template>
   
  <script>
  export default {
    // 当前页面的  父页面传过来的参数
      props: ['contentArr'],
      data(){
          return{
            // 定义变量
              items: [],
            //   定义传值的变量   // 新增数组用于存储
              itemcontent: {
                conten:[],
                images:[]
              },
          }
      },
      created() {

        // 把从当前页面的  父页面传过来的参数  进行赋值,赋值给items
          this.items=this.contentArr

   
          // // 然后,从 items 中提取 imageUrl 并更新 images///提取 content 并更新 conten
          this.itemcontent.conten = this.items.map(item => item.content);
   
          this.itemcontent.images = this.items.map(item => item.imageUrl );
   
          
          // 将this.contentArr数组中的每个元素(item)通过map方法处理,返回一个新的数组,赋值给this.items。
            this.items = this.contentArr.map(item => ({
            // 使用对象展开语法复制当前item对象的所有属性。
            ...item,
            // 对content属性进行特殊处理:
            content: item.content
                .replace(/&nbsp;/g, ' ') // 首先,使用正则表达式将所有&nbsp;字符(HTML中表示不间断空格的实体)替换为普通的空格字符。
                                        // /g标志表示全局替换,即替换所有匹配的项,而不仅仅是第一个。
                .replace(/<[^>]*>/g, '') // 然后,使用正则表达式剥离所有的HTML标签。
                                        // 这个正则表达式匹配以<开头,以>结尾,中间不包含>的任意字符序列,即匹配一个完整的HTML标签,并将其替换为空字符串。
                                        // 同样,/g标志表示全局替换。
            
            }));
    },
    methods: {
      but() {
        // alert('内容')

        // 通过路由把参数传给  当前页面的子页面
        this.$router.push({
                path: '/subcomponent/DetailPage',  //路径  需要在 router 定义路由 
                query: {

                // 传递的是一个对象 但是路由有限制 所以需要变化
                itemcontent: JSON.stringify(this.itemcontent) // 将对象转换为字符串,因为 query 参数只能是字符串

                // 传递一项 可以不用转换类型
                // itemcontent: this.itemcontent.images
                }
            });
   
            // 写法二
            // this.$router.push({ path: '/subcomponent/DetailPage',this.itemcontent.images });
   
      },
    }
   
  }
  </script>
   
  <style>
  .km{
      width: 43rem;
      background-color: rgb(255 255 255);
      flex-wrap: wrap;
      gap: 1rem;
    }
   
    .title-km {
      flex: 1 1 calc(33.333% - 1rem); 
      box-sizing: border-box; 
      padding: 1rem; 
      display: flex;
  }
   
  .title-km-img {
      width: 10rem;
      height: 8rem;
   
  }
   
  .title-km-text-p{
    width: 13rem;
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
   
  }
  .title-km-text-span {
    display: inline-block;
    width: 25rem; 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
    font-size: 16px; 
  }
   
  .but{
   margin-left: 35rem;
   margin-top: -2rem;
   position: absolute;
   
  }
   
  .el-divider--horizontal {
      display: block;
      height: 1px;
      width: 100%;
      margin: 3px 0;
  }
  </style>

子页面

<template>
    <!-- 组件的模板部分 -->
    <div class="conten">
      <!-- 使用v-for指令遍历images数组,为每个元素渲染一个img标签 -->
      <!-- :key绑定唯一标识,这里使用index作为临时解决方案,但通常建议使用唯一ID -->
      <img v-for="(image, index) in images" :key="index" :src="image" alt="Image">
   
      <!-- 使用v-html指令将sanitizedConten的数据作为HTML插入到p标签中 -->
      <!-- 注意:v-html会插入原始的HTML,因此要确保sanitizedConten是安全的,避免XSS攻击 -->
      <p v-html="sanitizedConten"></p>
    </div>
  </template>
   
  <script>
  export default {
    data() {
      return {
        // 定义响应式数据
        images: [], // 存储图片的URL数组
        contenRaw: '', // 存储从路由获取的原始HTML内容(未清理)
        sanitizedConten: '' // 存储清理后的HTML内容,用于安全显示
      };
    },
    computed: {
      // 定义一个计算属性,用于从路由查询参数中获取itemcontent数据
      itemcontent() {
        // 使用this.$route.query访问路由查询参数
        // 提供一个空对象字符串作为默认值,然后尝试解析为JSON
        return this.$route.query.itemcontent || '{}';
      }
    },
    mounted() {
      // 组件挂载完成后执行的钩子函数
      try {
        // 解码URL编码的JSON字符串,并尝试解析为JavaScript对象
        const parsedData = JSON.parse(decodeURIComponent(this.itemcontent));
        
        // 确保this.images是一个数组,即使解析的数据中没有提供images也保持为数组
        this.images = parsedData.images || [];
        
        // 处理contenRaw,假设只需要显示第一个content元素(如果有的话)
        this.contenRaw = parsedData.conten ? parsedData.conten[0] : '';
        
        // 使用cleanHtml方法清理HTML内容,并将结果赋值给sanitizedConten
        this.sanitizedConten = this.cleanHtml(this.contenRaw);
      } catch (error) {
        // 如果在解析或处理数据时发生错误,将错误信息打印到控制台
        console.error('Error parsing itemcontent:', error);
      }
    },
    methods: {
      // 定义一个方法用于清理HTML内容
      cleanHtml(html) {
        // 使用正则表达式删除所有的HTML标签(包括自闭合标签)
        // 同时将&nbsp;实体替换为空格,并去除字符串两端的空白字符
        return html.replace(/<\/?[^>]+(>|$)/g, '').replace(/&nbsp;/g, ' ').trim();
      }
    }
  };
  </script>
   
  
  <style scoped>
  /* .conten{
    padding:  7rem 20rem ;
  } */
  </style>

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

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

相关文章

OpenCV基础:矩阵的创建、检索与赋值

本文主要是介绍如何使用numpy进行矩阵的创建&#xff0c;以及从矩阵中读取数据&#xff0c;修改矩阵数据。 创建矩阵 import numpy as npa np.array([1,2,3]) b np.array([[1,2,3],[4,5,6]]) #print(a) #print(b)# 创建全0数组 eros矩阵 c np.zeros((8,8), np.uint8) #prin…

解锁未来情感科技:AI 机器人 Ropet 搭载的前沿智能黑科技

2025年的国际消费电子产品展览会&#xff08;CES&#xff09;上&#xff0c;一只可爱的“毛绒玩具”成了全场焦点。 当然&#xff0c;这并不是一个单纯的玩偶&#xff0c;而是和《超能陆战队》的大白一样温暖的陪伴机器人。 相信有很多人和小编一样&#xff0c;当年看完《超能…

软件测试 —— Selenium常用函数

软件测试 —— Selenium常用函数 操作测试对象点击/提交对象 click()模拟按键输入 send_keys("")清除文本内容 clear() 模拟用户键盘行为 Keys包示例用法 获取文本信息 textget_attribute("属性名称") 获取当前页面标题 title获取当前页面的 url current_u…

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘&#xff08;520字节&#xff09;。21块盘组建了2组RAID6&#xff1a;一组有11块硬盘&#xff0c;一组有10块硬盘。 在存储运行过程中&#xff0c;管理员误操作删除了 2组…

python 轮廓 获取环形区域

目录 效果图&#xff1a; 代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …

算法妙妙屋-------2..回溯的奇妙律动

回溯算法是一种用于系统性地搜索和解决问题的算法&#xff0c;它以深度优先搜索&#xff08;DFS&#xff09;为基础&#xff0c;用来探索所有可能的解决方案。通过递归地尝试候选解并在必要时回退&#xff08;即“回溯”&#xff09;&#xff0c;它能够高效地解决许多涉及组合、…

如何在Jupyter中快速切换Anaconda里不同的虚拟环境

目录 介绍 操作步骤 1. 选择环境&#xff0c;安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题&#xff0c;其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面&#xff0c;如何让jupyter快速切换不同的Pyt…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…

2025/1/12 复习JS

我乞求你别再虚度光阴 ▶ 空心 --------------------------------------------------------------------------------------------------------------------------------- 摘自哔哩哔哩听课笔记。 01 上篇&#xff1a;核心语法 1.基于页面效果的操作 <!DOCTYPE html>…

初学stm32 --- II2C_AT24C02,向EEPROM中读写数据

目录 IIC总线协议介绍 IIC总线结构图 IIC协议时序 1. ACK&#xff08;Acknowledge&#xff09; 2. NACK&#xff08;Not Acknowledge&#xff09; IO口模拟II2C协议 发送起始信号&#xff1a; 发送停止信号&#xff1a; 检测应答信号&#xff1a; 发送应答信号&#x…

Angular-生命周期及钩子函数

什么是生命周期 Angular 创建和渲染组件及其子组件&#xff0c;当它们绑定的属性发生变化时检查它们&#xff0c;并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…

vue(五)基础语法--循环遍历指令

目录 简单数据的处理&#xff08;常用&#xff09; 复杂数据&#xff08;json数据&#xff09; v-for 与对象 通过key管理状态 Key的来源 这一节类同于vue&#xff08;四&#xff09;基础语法--条件渲染-CSDN博客 &#xff0c;本质都是那些基础语句语法的实现。 简单介绍 …

【全套】基于分类算法的学业警示预测信息管理系统

【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式&#xff0c;同时也是现代学业预测信息管理的基础&#xff0c;利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…

解决线程安全问题,Lock锁,死锁以及如何避免,线程的通信和线程池

如何解决线程安全问题 当多个线程共享一个资源时&#xff0c;则可能出现线程安全问题。 java中解决线程安全的方式有三种 第一种: 同步代码块 第二种: 同步方法 第三种: Lock 同步代码块 synchronized(锁对象){ 需要同步的代码。 } synchronized 同步的意思 锁对象可以是任…

源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)

方法一&#xff1a;使用 systemd 服务文件 sudo yum install gcc make autoconf apr-devel apr-util-devel pcre-devel 1.下载源码 wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz 2.解压源码 tar -xzf httpd-2.4.46.tar.gz 如果没有安装tar 记得先安装…

基于微信小程序的智能停车场管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

LabVIEW驱动电机实现样品自动搜索

利用LabVIEW控制电机驱动相机在XY平面上进行扫描&#xff0c;以检测样品位置。样品最初可能位于相机视野范围之外&#xff0c;需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点&#xff1a; 高效搜索&#xff1a;能够快速确定样品位置&#xff0c;缩短…

excel 整理表格,分割一列变成多列数据

数据准备 对于很多系统页面的数据是没有办法下载的。 这里用表格数据来举例。随便做数据的准备。想要看excel部分的可以把这里跳过&#xff0c;从数据准备完成开始看。 需要一点前端基础知识&#xff0c;但不多&#xff08;不会也行&#xff09;。 把鼠标放在你想要拿到本地的…