将 vitejs v2 添加到 Vue v3 时路由器不工作
Router not working when adding vitejs v2 to Vue v3
开发服务器一直使用 webpack
的应用现在应该使用 vite
。除了路线外,一切似乎都运行良好(而且速度很快)。这些被简单地忽略,只呈现 App.vue
的内容。
这是package.json
:
{
"name": "mode",
"version": "0.0.0",
"scripts": {
"dev": "vite"
},
"dependencies": {
"vue": "^3.0.5",
"vue-router": "^4.0.4"
},
"devDependencies": {
"@vitejs/plugin-vue": "^1.1.4",
"@vue/compiler-sfc": "^3.0.5",
"vite": "^2.0.2",
"typescript": "~3.9.3"
}
}
中央index.html
是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
在 src/main.ts
中加载了 router
:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')
路由器定义在src/router/index.ts
:
import { createRouter, createWebHistory } from 'vue-router'
import SomePage from '@/views/SomePage.vue'
const router = createRouter({
history: createWebHistory(),
routes: [{
path: '/some',
name: 'Some',
component: SomePage
}]
})
export default router
(从未显示)src/views/SomePage.vue
是:
<template>
<div class="section">
Some content on some page.
</div>
</template>
这是(始终显示)App.vue
:
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
有了这个 src/components/HelloWorld.vue
:
<template>
<h1>{{ msg }}</h1>
<p>
Fancy text.
</p>
</template>
<script setup>
import { defineProps } from 'vue'
defineProps({
msg: String
})
</script>
我希望 http://localhost:3000/some 显示 SomePage.vue
的内容,但只呈现 App.vue
的内容,与使用的路由无关。
感谢指出我在这里遗漏的内容以及为什么忽略了精细路线。
您需要添加路由视图才能转到路由的页面。
如果您想让 SomePage 成为 App.vue 的一部分,只需按
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<router-view />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
开发服务器一直使用 webpack
的应用现在应该使用 vite
。除了路线外,一切似乎都运行良好(而且速度很快)。这些被简单地忽略,只呈现 App.vue
的内容。
这是package.json
:
{
"name": "mode",
"version": "0.0.0",
"scripts": {
"dev": "vite"
},
"dependencies": {
"vue": "^3.0.5",
"vue-router": "^4.0.4"
},
"devDependencies": {
"@vitejs/plugin-vue": "^1.1.4",
"@vue/compiler-sfc": "^3.0.5",
"vite": "^2.0.2",
"typescript": "~3.9.3"
}
}
中央index.html
是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
在 src/main.ts
中加载了 router
:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')
路由器定义在src/router/index.ts
:
import { createRouter, createWebHistory } from 'vue-router'
import SomePage from '@/views/SomePage.vue'
const router = createRouter({
history: createWebHistory(),
routes: [{
path: '/some',
name: 'Some',
component: SomePage
}]
})
export default router
(从未显示)src/views/SomePage.vue
是:
<template>
<div class="section">
Some content on some page.
</div>
</template>
这是(始终显示)App.vue
:
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
有了这个 src/components/HelloWorld.vue
:
<template>
<h1>{{ msg }}</h1>
<p>
Fancy text.
</p>
</template>
<script setup>
import { defineProps } from 'vue'
defineProps({
msg: String
})
</script>
我希望 http://localhost:3000/some 显示 SomePage.vue
的内容,但只呈现 App.vue
的内容,与使用的路由无关。
感谢指出我在这里遗漏的内容以及为什么忽略了精细路线。
您需要添加路由视图才能转到路由的页面。
如果您想让 SomePage 成为 App.vue 的一部分,只需按
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<router-view />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>