Vue:如何根据所选选项更改路线,并在<select>元素中显示默认的所选选项?

时间:2020-11-05 20:47:18

标签: javascript vue.js vuejs2 vue-component html-select

我可以根据我的下拉列表组件中选择的选项来更改路线。但是,选择菜单没有在onChange上显示正确的选定值。

这是我的组成部分:

<template>
  <select v-model="accountMenuOption" @change="onChange()">
    <option value="/">Page 1</option>
    <option value="/2">Page 2</option>
    <option value="/3">Page 3</option>
  </select>
</template>

<script>

export default {
  name: 'AccountDropdown',
  data() {
    return {
      accountMenuOption: '/',
    };
  },
  methods: {
    onChange() {
      this.$router.push(this.accountMenuOption);
    },
  },
};
</script>

当我选择第二个选项时,路由更改为/2,这很好。但是,一旦路线更改,select元素就不会通过将默认选择值显示为“页面2”来更新。它只是继续显示“页面1”作为所选值。如何更改路由后更改选择元素的默认选择值?

2 个答案:

答案 0 :(得分:1)

它可以正常工作,如以下示例所示:

Vue.config.devtools = false;
Vue.config.productionTip = false;
const Page1 = {
  template: '<div>page 1</div>'
}
const Page2 = {
  template: '<div>page 2</div>'
}
const Page3 = {
  template: '<div>page 3</div>'
}

const routes = [{
    path: '/',
    component: Page1
  },
  {
    path: '/2',
    component: Page2
  },
  {
    path: '/3',
    component: Page3
  }
]

const router = new VueRouter({
  routes
})
new Vue({
  el: '#app',
  router,
  data() {
    return {
      accountMenuOption: '/',
    };
  },
  methods: {
    onChange() {
      this.$router.push(this.accountMenuOption);
     
    },
  },
})
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app" class="container">
  <select v-model="accountMenuOption" @change="onChange()">
    <option value="/">Page 1</option>
    <option value="/2">Page 2</option>
    <option value="/3">Page 3</option>
  </select>
  <router-view></router-view>
</div>

答案 1 :(得分:0)

我最终通过在组件导出中添加以下内容解决了该问题:

  created() {
    // Make sure the correct option is shown on load
    this.accountMenuOption = this.$router.history.current.fullPath;
  },
  watch: {
    // Watch for route changes
    $route(route) {
      // Change the value of the selected option
      this.accountMenuOption = route.path;
    },
  },

我是Vue的新手,所以不确定为什么这可以解决我的问题,但是确实可以。如果有人想解释,请随时。