Vue.js VueRouter router-link изменяет URL-адрес, но страница не работает

мой файл main.js имеет следующее

import TurbolinksAdapter from 'vue-turbolinks';
import Vue from 'vue/dist/vue.esm';
import VueRouter from 'vue-router';
import EventIndex from '../src/views/EventsIndex.vue';
import EventsTable from '../src/components/EventsTable.vue'
import { routes } from '../src/router/routes';

Vue.use(TurbolinksAdapter);
Vue.use(VueRouter);

const router = new VueRouter({
  routes,
  mode: 'history'
});

document.addEventListener('turbolinks:load', () => {
  var element = document.getElementById('vue_code');
  if (element != null) {
    new Vue({
      el: '#vue_code',
      Store,
      router,
      render: h => h(EventIndex)
    });

В моем файле routes.js есть следующее:

import Vue from "vue/dist/vue.esm";
import VueRouter from "vue-router";
import EventForm from "../components/EventForm";

Vue.use(VueRouter);

const routes = [
  {
    path: "/events/new",
    name: "EventForm",
    component: EventForm
  }
];

Фрагмент ссылки на маршрутизатор из моего файла компонента EventsTable.vue имеет следующее:

<template lang=haml>
...

%tbody
  %tr{v-for: "event in events"}
    %td
      %router-link.fa.fa-pencil{to: "/events/new"}
      %router-view

 ...
<template>

<script>
    import EventForm from './EventForm';

    components: {
      EventForm
    }
</script>

Когда я нажимаю на ссылку, я ожидаю, что страница изменится на страницу EventForm. Вместо этого URL-адрес изменяется, но окно браузера не меняется. Но как только я перезагружаю страницу, браузер переходит на страницу EventForm.

Любая помощь приветствуется. Спасибо


person It'sJohnny    schedule 29.01.2020    source источник
comment
Я не эксперт по хаммам, но похоже, что у вас есть router-view в каждой строке вашей таблицы. Попробуйте удалить его со стола и разместить только один router-view за пределами стола ...   -  person Michal Levý    schedule 30.01.2020
comment
Вашему файлу маршрутов не нужно ничего, кроме импортированного компонента, поскольку это просто определения, которые будут использоваться вне его.   -  person jshrc    schedule 30.01.2020


Ответы (1)


Первая строка пакета vue-turbolinks гласит:

⚠️ Если вы используете vue-router или другую библиотеку маршрутизации Javascript, вам не нужно использовать Turbolinks или этот адаптер. Turbolinks предназначен для повышения уровня традиционного цикла рендеринга запроса путем загрузки новой страницы в фоновом режиме, и этот адаптер позволяет использовать компоненты Vue на страницах, отрисованных таким образом. Если вы решили использовать одностраничное приложение, у вас уже есть все необходимое. ????

Вы не можете использовать vue-router и Turbolink вместе. Turbolinks управляет всей навигацией по вашему сайту. Навигация с использованием vue-router не работает, потому что она пытается выполнить отправку истории вместо загрузки всей страницы.

Я предлагаю программную маршрутизацию с использованием функции Turbolinks.visit() вместо использования vue-router. Вам нужно будет создать новое представление для страницы EventForm, которая загружает ваш компонент vue.

person Chase DeAnda    schedule 29.01.2020
comment
хм ... после удаления турбулентных ссылок из моего main.js и использования вместо этого загрузчика содержимого DOM и использования только vue-router у меня все еще возникает та же проблема. Но может случиться так, что я использую Vue как интерфейсную часть, а рельсы как серверную часть. Я до сих пор использую некоторые рельсовые маршруты, которые могут противоречить друг другу? Я не уверен. Еще раз спасибо за понимание. - person It'sJohnny; 30.01.2020
comment
@ It'sJohnny, да, ваша догадка верна, вы не можете обрабатывать маршрутизацию с помощью Rails И Vue, вам нужно выбрать одно или другое. Я бы посоветовал понять разницу между маршрутизацией на стороне сервера и на стороне клиента: medium.com/@wilbo/ - person Chase DeAnda; 30.01.2020