在路由跳转时监听改变网页标题
//index.js { path: '/about', name: 'About', // mate: { // title: 'home' // }, beforeEnter: (to, from, next) => { //路由独享的守卫 next() }, component: About }, //前置守卫(guard) router.beforeEach((to, from, next) => { document.title = to.name, // document.title = to.matched[0].meta.title, next() //调用next方法后,才能进入下一个钩子 }) //后置钩子(hook) router.afterEach((to, from) => { //不需要next() })详细可见官网组件内的守卫
通过添加<keep-alive>使被包含的组件保留状态,或避免重新渲染。
//App.vue <keep-alive> <router-view/> </keep-alive> //include和exclude中填字符串或正则表达式 <keep-alive exclude="组件的name,组件的name"> //任何匹配到的组件都不会被缓存 //注意','后不能加空格 </keep-alive> <keep-alive exclude="组件的name,组件的name"> //只有匹配到的组件才会被缓存 </keep-alive>注意一点:activated,deactivated这两个生命周期函数一定是要在使用了keep-alive组件后才会有的,否则则不存在
若是因为重定向默认挂载某个组件而无法使用<keep-alive>返回之前的组件:
//Home.vue export default { name: "Home", data() { return { path: '/home/news' } }, // created() { // 创建完毕状态:完成了 data 数据的初始化,el没有 // }, // deactivated() { // 销毁完成状态 // }, activated() { // 组件在激活状态时调用 // console.log('activated'); //返回时push到之前的 this.$router.push(this.path); }, // deactivated() { // 组件被移除时调用 // console.log('deactivated'); // }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 console.log(this.$route.path); // 离开时记录最后活跃的路径名 this.path = this.$route.path; next() } }若是有些导入路径太麻烦,import时可以用@/components/。。。来指定从src根目录开始导入,而例如img或style就要用~@/。。。来导入。
在vue组件中我们我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点。添加scoped之后,实际上vue在背后做的工作是将当前组件的节点添加一个像data-v-1233这样唯一属性的标识,当然也会给当前style的所有样式添加[data-v-1233]这样的话,就可以使得当前样式只作用于当前组件的节点。
注意因为App.vue是主容器,不能在其中的style再添加scoped了,若父组件有scoped,子组件没有设置,同样,也是不能在父组件中设置子组件的节点的样式的,因为父组件用了scoped,那么父组件中style设置的样式都是唯一的了,不会作用与其他的组件样式。
主要参考这个教学视频学习:https://www.bilibili.com/video/BV15741177Eh?p=1