列表页进入详情页App

1.在首页写下id,当点击这个id时跳转到详情页
在这里插入图片描述
比如说当你点击图片的时候就会跳转到详情页
在这里插入图片描述

  methods: {
    goxq(id) {
      this.$router.push("/xq?id=" + id);
    },
  },

2.在详情页接受数据并点击返回列表页
在这里插入图片描述

methods: {
     onClickLeft() {
        this.$router.push("/sy")
    },
},

点击返回首页
在这里插入图片描述

  <van-nav-bar title="商品详情" left-arrow @click-left="onClickLeft"/>
以下为不同前端框架实现列表页进入详情页返回不刷新(保持当前分页),从其他页面进入列表页刷新的方法: ### Vue.js 实现方案 在 Vue.js 里,可借助 `keep-alive` 组件和路由守卫达成此功能。`keep-alive` 能够缓存组件实例,防止组件在切换时被销毁和重新创建,路由守卫则用于控制页面的刷新逻辑。 ```vue <template> <div id="app"> <!-- 使用 keep-alive 缓存组件 --> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template> <script> export default { name: 'App', watch: { // 监听路由变化 $route(to, from) { if (to.name === 'ListPage' && from.name === 'DetailPage') { // 从详情页返回列表页,不刷新 to.meta.keepAlive = true; } else if (to.name === 'ListPage') { // 从其他页面进入列表页,刷新 to.meta.keepAlive = false; } } } }; </script> ``` ### React 实现方案 在 React 中,可以使用 `React Router` 配合 `useRef` 和 `useEffect` 来实现。`useRef` 可以保存分页状态,`useEffect` 用于处理页面加载和路由变化的逻辑。 ```jsx import React, { useRef, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; const ListPage = () => { const currentPageRef = useRef(1); const location = useLocation(); const navigate = useNavigate(); useEffect(() => { if (location.state && location.state.fromDetail) { // 从详情页返回,恢复分页状态 // 这里可以根据实际情况恢复分页状态 } else { // 从其他页面进入,重置分页状态 currentPageRef.current = 1; } }, [location]); const goToDetail = () => { navigate('/detail', { state: { fromList: true, currentPage: currentPageRef.current } }); }; return ( <div> <h1>List Page</h1> {/* 列表内容 */} <button onClick={goToDetail}>Go to Detail</button> </div> ); }; export default ListPage; ``` ### Angular 实现方案 在 Angular 中,可以使用路由守卫和服务来实现。路由守卫可以控制路由的访问,服务可以保存分页状态。 ```typescript import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router, NavigationEnd } from '@angular/router'; import { filter } from 'rxjs/operators'; @Component({ selector: 'app-list-page', templateUrl: './list-page.component.html', styleUrls: ['./list-page.component.css'] }) export class ListPageComponent implements OnInit { currentPage = 1; constructor(private route: ActivatedRoute, private router: Router) { this.router.events.pipe( filter(event => event instanceof NavigationEnd) ).subscribe((event: NavigationEnd) => { if (event.urlAfterRedirects.includes('/detail') && event.urlAfterRedirects.includes('/list')) { // 从详情页返回列表页,不刷新 } else { // 从其他页面进入列表页,刷新 this.currentPage = 1; } }); } ngOnInit(): void { // 初始化逻辑 } goToDetail() { this.router.navigate(['/detail'], { state: { fromList: true, currentPage: this.currentPage } }); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奥佳博客(王小政)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值