Настройка маршрутизатора Vue3 с помощью ссылки меню

У меня в проекте есть src / route / router.js :

      const Reservation = () => import("../components/Reservation.vue");
const Scheduler = () => import("../components/Scheduler.vue");

const routes = [
  {
    path: "/index.html#reservation",
    name: 'reservation',
    component: Reservation,
  },{
    path: "/index.html#scheduler",
    name: 'scheduler',
    component: Scheduler,
  }
];

export default routes;

Я могу поставить точку останова в своем коде, и она попадает в нее при загрузке страницы.

В App.vue у меня отображается компонент Header.vue :

      <template>
  <Header></Header>
</template>

<script>
import Header from './components/Header.vue';

export default {
  name: 'App',
  components: {
    Header
  }
}
</script>

Компонент заголовка ссылается на другие страницы, не относящиеся к Vue, но для элементов, отмеченных как useRouter, он отображает ссылку следующим образом:

      <li v-for='child in topLevel.children' :key='child.text'>
  <span v-if="child.useRouter"><router-link :to="child.link">{{ child.text }}</router-link></span>
  <span v-if="!child.useRouter"><a :href="child.link">{{ child.text }}</a></span>
</li>

На том же Header.vue входит в его шаблон:

        ...
  </div>
     <router-view></router-view>
  </div>
</template>

И в файле Header.vue у меня есть следующий импорт :

      import { ref } from 'vue';
import axios from 'axios';

Ни один из компонентов не загружается в маршрутизатор при нажатии на ссылку. URL-адрес НЕ изменяется с хэш-тегом при нажатии. Но даже ручное редактирование URL-адреса для соответствия маршруту не работает.

Оба компонента работали, когда они были напрямую загружены на страницу. На странице нет ошибок JavaScript, даже если щелкнули элемент, который должен быть перенаправлен.

1 ответ

Код, размещенный здесь, почти правильный, за исключением #urls. Это просто не работает с скомпилированным кодом, размещенным на URL-адресе, отличном от root.

      import { createWebHistory, createRouter } from "vue-router";
import Reservation from "../components/Reservation.vue";
import Scheduler from "../components/Scheduler.vue";

const routes = [
  {
    path: "/reservation",
    name: 'reservation',
    component: Reservation,
  },{
    path: "/scheduler",
    name: 'scheduler',
    component: Scheduler,
  }
];

const router = createRouter({
    history: createWebHistory(),
    routes
})

export default router;

Так что это действительно сработает, если я сделаю с vue.config.js следующее:

      const path = require("path");

module.exports = {
  publicPath: '/vue/dist/index.html',
  css: {
    loaderOptions: {
      sass: {
        data: '@import "@../styles/_colors.scss";'
      }
    }
  },
  devServer: {
    proxy: "http://192.168.0.44",
  },
  configureWebpack: {
    module: {
      rules: [{
        test: /\.s(c|a)ss$/,
        use: [
          'vue-style-loader',
          'css-loader',
          {
            loader: 'sass-loader',
            // Requires sass-loader@^7.0.0
            options: {
              implementation: require('sass'),
              fiber: require('fibers')
            },
          },
        ],
      }, ],
    },
  }
};

Когда вы щелкаете ссылку маршрутизатора, работающую на скомпилированном коде, она отображается правильно, а URL-адрес задан правильно, но вы не можете просматривать таким образом, потому что полученный путь неправильно настроен на сервере. Но это улучшение.

На сервере localhost:1081 dev он работает правильно, но я не понял, как настроить прокси для работы ajax.

Другие вопросы по тегам