Как использовать VueRouter в расширении Chrome

Я делаю расширение для Chrome с помощью Vue 3 + VueRouter.

С помощью функции router.push я пытался изменить содержимое представления маршрутизатора на другой компонент, то есть показывать пользователям другой пользовательский интерфейс.

Однако, какие бы методы я ни использовал, я просто не могу изменить представление.

Итак, у моего App.vue есть Router-View, и у меня есть два компонента, которые я хотел бы показать по одному.

Первый компонент — «О нас», а второй — «Дом».

Что я сделал, так это создал метод, который срабатывает при событии onClick.

Итак, первое представление — Home (пользователи сначала видят это представление). Затем, когда пользователь нажимает кнопку, он меняет компонент пользовательского интерфейса, показывая страницу «О странице». Я использовал router.push('/about') для замены компонента пользовательского интерфейса на About.vue. Это было неудачно.

Я знаю о том факте, что расширения Chrome на самом деле не являются веб-страницей, поэтому маршрутизация отличается, но, похоже, ничего не работает.

Я проверил эту ссылку и попробовал, и, к сожалению, это было бесполезно

Как отобразить вид маршрутизатора с помощью VUEJS3 в проекте сборки для расширения Google Chrome

router.js

import { createRouter, createWebHashHistory } from "vue-router";

const routes = [
  {
    path: "/index.html",
    component: () => import("../src/App.vue"),
    name: "App",
  },
  {
    path: "/about",
    component: () => import("../src/views/About.vue"),
    name: "About",
  },
];

const router = createRouter({
  history: createWebHashHistory("index.html"),
  routes,
});

export default router;

main.js

import { createApp } from "vue";
import App from "./App.vue";
import "./index.css";
import store from "./store/index";
import router from "./router";

const app = createApp(App);
app.use(store);
app.use(router);
app.mount("#app");

App.vue (когда я использовал router-view)

<template>
  <router-view />
</template>

Если я делаю такой вид маршрутизатора в расширении Chrome, ничего не отображается

Поэтому я сделал это также, чтобы изменить представление с помощью router-link. Это не сработало. Нажав на тег router-link, ничего не сработало.

<template>
 <Login />
<router-link to = "/about"> About </router-link>
</template>

methods: {
  routerPush() {
      this.$router.push("about");
      this.$router.push("/about"); tried both / and without /
    },
}

<template>
 <Login />
<span @click = "routerPush"> About </span> 
</template>

Сделал приведенный выше код только для того, чтобы опробовать функциональность router.push. Это было неудачно

Попробуйте использовать хеш-режим в роутере.

wOxxOm 20.11.2022 10:18

Проверьте комментарий в этой теме.

Zarko 20.11.2022 12:56

@wOxxOm Я использовал историю: createWebHashHistory(), и, похоже, ничего не работает..

espc 22.11.2022 06:54

@Zarko Я уже проверил это и следовал ему, однако для меня это не работает :(

espc 23.11.2022 01:03

@espc Штанге. Хорошо, пара вещей. Можете ли вы поделиться тем, как вы на самом деле используете router.push, а также где вы используете router-view? Можешь дать нам хотя бы порцию App.vue? Я предполагаю, что это ваша отправная точка. Кроме того, попробуйте ``router-link', чтобы убедиться, что это действительно работает.

Zarko 23.11.2022 08:26

@Zarko Привет, спасибо за продолжение, я обновил App.vue и не возражаю против незначительных синтаксических различий, которые я только что быстро обновил, чтобы показать вам, что я сделал с точки зрения методов, которые я использовал.

espc 23.11.2022 08:44

Вы пробовали с mode: "abstract" ? Возможно, это поможет - dev.to/rezvitsky/… и streaver.com/blog/posts/create-web-extension-vue

IVO GELOV 23.11.2022 09:39

@IVOGELOV Спасибо за ссылки, я уже проверил первый. Я даже клонировал его, чтобы увидеть самому, но проект не работает. Первый — это тот, который мне понадобился для других компонентов и настройки VueRouter, но мой выглядит идентично первому и не работает :(

espc 24.11.2022 00:13

Согласно ветке, упомянутой Зарко, они предлагают использовать режим history, а не режим hash, чтобы переходить на ваш домашний маршрут при создании приложения и соответствовать / следовать иерархии папок.

IVO GELOV 24.11.2022 12:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я починил это. Причина, по которой маршрутизатор Vue не работал, заключается в том, что у меня не было рендерера Vue для монтирования.

Вам понадобится компонент Renderer.vue или что-то еще, что будет содержаться в шаблоне, и смонтируйте этот компонент в main.js createApp(Renderer) следующим образом.

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