【问题标题】:How to use Vue router to change carousel slides?如何使用Vue路由器更改轮播幻灯片?
【发布时间】:2021-02-07 02:04:28
【问题描述】:

我是 Vue 初学者,我有一个问题:我有一个导航栏,我想要一些链接(如下所示的“Link2”)路由到同一个视图,但每个链接都有不同的值(1,2, 3),这样我就可以构建一个根据所选选项更新的轮播。

不想要link2/:opt这样的路由,因为我无法在页面中刷新,我只想将链接选项绑定到查看文件。

我试图通过在路由器中使用元标记来实现这一点,然后在导航栏中更新每个选项单击时的元标记。我的问题是我无法读取视图中元标记的更改。无论我选择什么选项,我总是得到 Link2 - option1。

路由器/index.js

{
  path: '/link2',
  name: 'link2',
  component: () => import('@/views/Link2.vue'),
  meta: { slide: '1' },
}

Navbar.vue

methods: {

    goRoute: function(url, opt) {
        this.$route.meta.slide = opt;

        //value of opt is correct here(1,2,3)
        console.log(this.$route.meta.slide);

        this.$router.push(url).catch((error) => {
          if (error.name != 'NavigationDuplicated') {
            throw error;
           }
    });
}

Link2.vue - 我想读取每个选项的值:

<template>
   <h1 class="mt-12">Link2- option{{ slide }}</h1>
</template>

<script>
   export default {
      name: 'Link2',
      data() {
         return {
           slide: 0,
         };
       },

      watch: {
         '$route.meta.slide': function(newValue) {
              this.slide = newValue;
          },
      },

      created() {
          this.slide = this.$route.meta.slide;
      },
   };
</script>

我错过了什么?有没有更好的解决方案? 提前致谢!

【问题讨论】:

  • 为什么无法刷新会阻止您使用参数?
  • 是否可以使用参数?基本上每个选项,我想留在路线 /link2 ,但更改视图中的幻灯片值。如果我第一次进入路线,我想在 /link2 中滑动=1,如果我已经在路线中并单击其他选项,只需更新滑动值
  • 是的,这就是 params 的用途。目前尚不清楚您为什么不想使用它们,但我会发布一个答案,告诉您无论如何。

标签: javascript vue.js vuejs2 vue-component vue-router


【解决方案1】:

尽管不需要刷新,您也可以使用路由参数:

{
  path: '/link2/:opt',  // param called `opt`
  name: 'link2',
  component: () => import('@/views/Link2.vue'),
}

$route 上使用watch 来确定何时更换幻灯片。它只会在您已经在查看组件并单击以更改(不是您第一次路由到组件时)触发,这就是您所说的。第一次,幻灯片将设置为 1,因为它在 data 中以这种方式初始化:

data() {
  return {
    slide: 1
  }
},
watch: {
  $route(to, from) {
    this.slide = Number(to.params.opt);
  }
}

例如,要转到第 2 张幻灯片,请使用 &lt;router-link&gt; 之类的:

<router-link to="/link2/2">Slide #2</router-link>

或以编程方式:

this.$router.push('/link2/2');

【讨论】:

  • 非常感谢,它成功了。我有点困惑,我认为使用参数,在每个选项单击或轮播箭头上它会刷新整个页面,但它的工作方式正是我想要的。谢谢你帮助我!
  • 但还有一件事,我如何在第一次进入路线时更改幻灯片值?我正在尝试使用 created 但不适合我
  • 不客气。在created 中使用:this.slide = Number(this.$route.params.opt) || 1;
猜你喜欢
  • 2019-09-27
  • 2019-09-08
  • 2020-06-11
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多