下面是我写的一个 demo
App.vue 文件
<template>
<div>这是根页面</div>
</template>
Login.vue 组件
<template>
<div>这是 login 页面</div>
<button @click="login">login</button>
</template>
<script setup>
import { useRouter } from 'vue-router';
const router = useRouter()
const toHome = () => {
localStorage.setItem('username', 'tom');
router.push('/')
}
</script>
路由文件
const routes = [
{
path: '/',
redirect: () => {
if(localStorage['username'] == 'tom'){
return '/'
}else{
return '/login'
}
}
},
{
path: '/login',
component: login
},
]
我的本意是 login 页面因为没有任何复用的标签或组件,是完全独立于/
根页面的,没登录跳转到 Login 组件,但当我访问localhost:3000
时,我以为的页面是这样的
但实际渲染出来的页面是
为啥差别这么大呢,为啥根页面内容没被替换掉,login 页面的内容没渲染出来
首先项目自带的 App.vue 最终会渲染到于/
根页面上,我没理解错吧?
为啥组件不能脱离 App.vue 渲染单独当做一个页面使用吗?只能使用<router-view/>
或者<component is=''/>
镶嵌在 App.vue 中使用吗?
还有访问一个我没有在路由中配置的 url ,如/home
,按理说是 404 ,但实际还可以访问 App.vue 的渲染的/
根页面,难道就不能限制/
完全只匹配/
,不去匹配/home
,/user
?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.