一个简单的需求,在登录首页不显示导航栏组件。
一种思路,导航栏组件用props参数控制是否显示,每个路由页面引入导航栏组件时给props赋值。
另一种思路,监听路由,当前路由path不是登录页就显示导航栏组件。用v-show或者v-if,因为v-show只渲染一次,能节省芝麻点资源,所以想用v-show。
考虑到每个路由页面引入导航栏组件,感觉原理有点象v-if(不确定,知识基础不牢,凭猜测),所以还是选第二种的v-show。
因为只需要获取当前路由参数,不需要控制路由,所以用route就行。查了不少方法,都是用this.$route,这个在vue3+ts已经不合语法。
能用在vue3+ts的代码是:
<script setup lang="ts">
import {useRoute} from "vue-router";
const route=useRoute()
console.log(route.path)
</script>
取到这个参数值就随便你怎么用了。
如果用了router,就不需要单用route了,对应代码是:
<script setup lang="ts">
import {useRouter} from "vue-router";
const router=useRouter()
console.log(router.currentRoute.value.path)
</script>
在各种文章中突然发现了不需要在script取值,直接在template可用的一种方法,赶紧收录:
<template>
<Header v-show=" $route.path!=='/' " />
<router-view/>
</template>
这就象是vue3默认的this.$route的简易用法。
感觉如果在约定路由文件routes.ts中,给每个路径赋上独立的name,用name参数比用path参数更加可靠。
补充:
又用了几天,发现vue3在template里面,不用去ts实例化,可以直接用双引号运行很多script命令,比如
“windows.close()" //关闭页面,firefox支持,chrome不支持。
“window.open(‘about:blank’,‘_self’)” //用空白页代替之前页面,变相关闭,firefox与chrome都支持。
“$router.push(‘/’)” //跳转路由
“document.exitFullscreen()” //退出全屏,进入全屏必须去script用document.documentElement.requestFullscreen()。
一般都是第一级函数或者参数可以直接用,如果再下一层,就要去script实例化操作了。