2017-02-14 12 views
0

Я делаю проект в Vue с Vue-Router. в моем проекте у меня есть параметр с именем «adtag», который должен находиться в параметрах запроса url, есть ли простой способ удерживать этот параметр, а не как маршрутизатор.Как сохранить параметры URL-запроса в Vue с Vue-Router

, например, у меня есть три страницы:

  1. локальных/индекс
  2. локальных/список
  3. локальных/подробно идентификатор изменение = 11

страницы с использованием VUE-маршрутизатор <router-link :to="{name:'Detail',query:{id:item.id}}"></router-link>?

если я открыл первую страницу localhost/index?adtag=123 с adtag, страница изменится с парами 'adtag'

  1. локальных/индекса? adtag = 123
  2. LocalHost/список? adtag = 123
  3. локальных/детали? adtag = 123 & ID = 11
+0

для чего это необходимо? Это действительно странно. Возможно, вы могли бы просто использовать Vuex вместо этого, чтобы сохранить этот ключ (или что бы то ни было) –

+1

, вы можете сделать это, используя эту страницу: https://forum.vuejs.org/t/vue-router-programmatically -append-to-querystring/3655/2 и с навигационной защитой 'router.beforeEach', doc: https://router.vuejs.org/en/advanced/navigation-guards.html – nicolast

+0

, но это выглядит как идеальный вариант использования для cookie (если вам нужен adtag на бэкэнд) или локальное хранилище (если вам нужен только adtag на интерфейсе) – nicolast

ответ

0

с установка по умолчанию Vue 2.x, файл маршрутизатора находится src/router/index.js

Мне удалось проверить, нужно ли мне изменить запрос и добавить любые отсутствующие параметры запроса (изменение to var, очевидно, не имеет эффекта), а затем вызывает «перенаправление» next(.. new rout..).

Даунсайд: Парный Призывы маршрут, потому что по существу он перенаправляет

Upside: Он работает, и запрос с сохранением логики в одном месте.

Оговорка: При загрузке страницы роутер запускается, а «из» - очень пустой маршрут (даже исключая параметры запроса, которые были в URL-адресе). Поэтому я устанавливаю этот оператор if, чтобы проверить необходимость размещения параметра запроса на месте.

import Vue from 'vue' 
import Router from 'vue-router' 
// ... All your other components 

Vue.use(Router) 

const router = new Router({ 
    mode: 'history', 
    routes: [ 
    { 
     path: '/', 
     name: 'Dashboard', 
     component: Dashboard 
    }, 
    // ... All your other routes 
    ] 
}) 

router.beforeEach((to, from, next) => { 
    if (from.query.token && !to.query.token) { 
    if (to.path === from.path) { 
     // console.log('Identical routes detected') 
     return // This is a no-no via the documentation, but a bug in routing to identical routes strips query params, and this prevents that 
    } 
    next({path: to.path, query: {token: from.query.token}}) 
    } 

    next() 
}) 

export default router 

 Смежные вопросы

  • Нет связанных вопросов^_^