sinat_26497661 2024-09-03 23:40 采纳率: 0%
浏览 20

nuxt3里面 ,跳转page页面动态路服务端页面刷新问题

在nuxt3里面 组件动态跳转page目录下页面的问题,动态路由传参,在服务器跳转一直刷新页面返回首页。

文章列表页面:components/layout/Articlelist.vue,位于components的layout目录下
前台内容: 。

在nuxt3里面 我这样写的根据文章id跳转详情页面:articledetails.vue,位于 page目录下面。

在本地电脑测试没问题的,地址如下:http://localhost:3000/articledetails?index=1 他是可以跳到文章详情页面的。(传递文章id时没问题的)
但是当我打包部署到服务器(宝塔)时候点击文章列表的文章跳转文章详情页面时(http://域名/articledetails?index=1 ),他直接就刷新页面回到首页了 ,这个是怎么回事呢?
我在文章列表页面里面已经指向跳转了::to="{path:'/articledetails',query:{index:article.id}},难道在组件里面跳转到page下面的页面 需要什么设置么?我看介绍nuxt里面都是自动注册路由的,怎么一放到服务器就不行了捏~
谁帮我分析看看 如何解决呢?怎么才能搞定这个动态路由跳在服务端不起作用导致页面刷新的问题~

img

page目录下的详情页面:

img

有没有人指点一下,怎么解决这个动态路由跳转在服务器端 页面一直刷新的问题。

  • 写回答

2条回答 默认 最新

  • 吃不了席 2024-09-03 23:41
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题是由于Nuxt3在开发模式下默认会自动创建路由,并且不会在生产环境中自动注册新的路由。在生产环境下,你需要手动将你的组件注册为路由。

    首先,你需要确保你的pages目录下有一个名为articles.js的文件,用于处理路由逻辑:

    export default {
      path: '/articles',
      name: 'Articles',
      component: ArticlesPage,
    };
    

    然后,你需要在你的articles.js文件中编写一个函数来处理路由。例如,你可以这样做:

    import { defineComponent } from "vue";
    
    export default defineComponent({
      // 在这里写你的组件定义
    });
    

    接下来,你需要修改你的Articlelist.vue组件以适配动态路由。你可以使用nuxt-link组件来实现这个功能。例如,你可以这样修改你的Articlelist.vue组件:

    <template>
      <nuxt-link
        to="/articledetails"
        :key="item.article_id"
        v-for="(item, i) in articles"
        :query="{
          index: item.article_id,
        }"
      >
        {{ item.title }}
      </nuxt-link>
    </template>
    
    <script setup lang="ts">
    import { useRoute } from "vue-router";
    import { onBeforeMount } from "vue";
    
    const route = useRoute();
    
    const articles = ref([]);
    
    async function fetchArticles() {
      const response = await fetch("/api/articles");
      const data = await response.json();
      articles.value = data;
    }
    </script>
    

    在这个例子中,我们使用nuxt-link组件来实现动态路由。to属性指定要跳转的目标路径,而:query属性包含一个包含index键值对的对象,其中index就是我们要传递给articledetails.vue组件的参数。

    另外,我们需要在Articlelist.vue组件中添加一些额外的逻辑来处理动态路由,例如更新状态、刷新页面等。这可能包括使用v-ifv-show元素来控制组件的状态,以及使用router.push()方法来刷新页面。

    此外,为了使你的组件能够正确地工作,你还需要在你的articledetails.vue组件中引用Articlelist.vue组件。例如:

    <template>
      <article v-if="isArticleVisible">
        <nuxt-link :to="{name: 'Articlelist', params: {index: article.id}}" tag="span">
          <img src="{{ article.cover }}" alt="">
        </nuxt-link>
        <article-list :articles="articles"></article-list>
      </article>
    </template>
    
    <script setup lang="ts">
    import { useRoute } from "vue-router";
    
    const route = useRoute();
    
    const articles = ref([]);
    </script>
    

    通过以上步骤,你应该能够在服务器上正确地跳转到文章详情页面并保持页面不刷新。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月3日
  • 创建了问题 9月3日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境