vue项目打开俩个不同的详情页,数据同步的解决办法

vue官网原话:提醒一下,当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。这就是为什么打开两个或多个详情页的时候,切换标签页数据不更新的原因。

解决办法(可以使用监听器,去监听路由的变化)

watch: {
  $route: {
    // $route可以用引号,也可以不用引号  监听的对象
    handler(to, from) {
      this.orderId = this.$route.query.orderId;
      this.onLoad();
    },
    deep: true, // 深度观察监听 设置为 true
    immediate: true, // 第一次初始化渲染就可以监听到
  },
},

提示:deep深度监听/第一次初始化渲染必须设置为true 

构建一个Vue3项目并实现新闻详情页通常包括以下几个步骤: 1. **安装依赖**:首先确保已经全局安装了Vue CLI(Vue脚手架),可以运行`npm install -g @vue/cli`。然后创建一个新的Vue3项目:`vue create news-detail-app`。 2. **选择模板**:在创建项目时,选择"Manually select features"选项,并选"Composition API",因为它更契合现代Vue3的实践。 3. **导航组件**: 创建一个用于展示新闻详情的组件,例如`src/components/NewsDetail.vue`,这里会包含标题、内容、图片等元素,以及可能的评论区域。 ```html <template> <div class="news-detail"> <h1>{{ title }}</h1> <p>{{ content }}</p> <img :src="image" alt="news image" /> <!-- 如果有评论功能,还可以引入CommentList组件 --> </div> </template> <script setup> import { ref } from 'vue'; export default { name: 'NewsDetail', props: { title: { type: String, required: true }, content: { type: String, required: true }, image: { type: String, required: true }, }, }; </script> ``` 4. **路由配置**:在`src/router/index.js`添加一个路由规则,指向 NewsDetail 组件。 ```javascript import { createRouter, createWebHistory } from 'vue-router'; import NewsDetail from '@/components/NewsDetail.vue'; const routes = [ // 其他路由... { path: '/news/:id', // 使用动态路由匹配新闻ID component: NewsDetail, }, ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes, }); export default router; ``` 5. **访问新闻详情**:在需要显示新闻详情的地方(如App.vue或其他视图),通过`this.$router.push`导航到详情页面,并传入新闻数据作为查询参数或路径参数。 6. **数据管理**:如果有多篇新闻,你可以使用Vuex进行状态管理,存储新闻列表并在需要的时候更新详情。 7. **样式处理**:使用CSS或预处理器(如Sass或Less)对组件进行美化布局。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值