diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/App.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/App.vue
new file mode 100644
index 0000000..14872a9
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/App.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+ About
+ Home
+
+
+
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/assets/logo.png b/20_脚手架/vue_code/37.src_组件内路由守卫/assets/logo.png
new file mode 100644
index 0000000..f3d2503
Binary files /dev/null and b/20_脚手架/vue_code/37.src_组件内路由守卫/assets/logo.png differ
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/components/Banner.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/components/Banner.vue
new file mode 100644
index 0000000..ab3725d
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/components/Banner.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/main.js b/20_脚手架/vue_code/37.src_组件内路由守卫/main.js
new file mode 100644
index 0000000..9c406ac
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/main.js
@@ -0,0 +1,23 @@
+// 引入Vue
+import Vue from "vue";
+// 引入App
+import App from "./App";
+// 引入VueRouter
+import VueRouter from "vue-router";
+// 引入router
+import router from "@/router";
+
+// 设置Vue
+Vue.config.productionTip = false
+
+// 使用插件
+Vue.use(VueRouter)
+
+// 实例化Vue
+new Vue({
+ components: {
+ App
+ },
+ render: h => h(App),
+ router: router,
+}).$mount('#app')
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/pages/About.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/About.vue
new file mode 100644
index 0000000..31ab240
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/About.vue
@@ -0,0 +1,38 @@
+
+ 我是About的内容
+
+
+
+
+
\ No newline at end of file
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Detail.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Detail.vue
new file mode 100644
index 0000000..95ef4fa
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Detail.vue
@@ -0,0 +1,17 @@
+
+
+ - 消息编号:{{id}}
+ - 消息标题:{{title}}
+
+
+
+
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Home.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Home.vue
new file mode 100644
index 0000000..9436f2f
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Home.vue
@@ -0,0 +1,40 @@
+
+
+
Home组件内容
+
+
+ -
+ News
+
+ -
+ Message
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Message.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Message.vue
new file mode 100644
index 0000000..746f387
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/Message.vue
@@ -0,0 +1,68 @@
+
+
+
+ -
+
+
+
+
+ {{ m.title }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/pages/News.vue b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/News.vue
new file mode 100644
index 0000000..e6e997a
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/pages/News.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/20_脚手架/vue_code/37.src_组件内路由守卫/router/index.js b/20_脚手架/vue_code/37.src_组件内路由守卫/router/index.js
new file mode 100644
index 0000000..377bee1
--- /dev/null
+++ b/20_脚手架/vue_code/37.src_组件内路由守卫/router/index.js
@@ -0,0 +1,108 @@
+import VueRouter from "vue-router";
+
+// 引入组件
+import About from "@/pages/About.vue"
+import Home from "@/pages/Home.vue"
+import News from "@/pages/News.vue"
+import Message from "@/pages/Message.vue";
+import Detail from "@/pages/Detail.vue";
+
+// 创建一个路由器
+const router = new VueRouter({
+ routes: [
+ {
+ name: 'guanyu',
+ path: '/about',
+ component: About,
+ meta: {
+ title: '关于',
+ isAuth: true
+ }
+ },
+ {
+ name: 'zhuye',
+ path: '/home',
+ component: Home,
+ meta: {
+ title: '主页'
+ },
+ children: [
+ {
+ name: 'xinwen',
+ path: 'news',
+ component: News,
+ meta: {
+ isAuth: true,
+ title: '主页'
+ },
+ // beforeEnter: (to,from,next)=>{
+ // console.log('独享路由守卫', to, from)
+ // if (localStorage.getItem('school') === 'atguigu'){
+ // next()
+ // }else{
+ // alert('学校名称不对,无权查看!')
+ // }
+ // }
+ },
+ {
+ name: 'xiaoxi',
+ path: 'message',
+ component: Message,
+ meta: {
+ isAuth: true,
+ title: '主页'
+ },
+ children: [
+ {
+ name: 'xiangqing',
+ path: 'detail/:id/:title',
+ component: Detail,
+ meta: {
+ title: '详情'
+ },
+ // props的第一种写法,key-val格式,通过props的方式传给detail组件
+ // props: {a:1,b:'hello'}
+ // props的第二种写法,布尔值,若布尔值为真,就会把路由组件收到的params参数以props的形式传给detail
+ // props: true
+ // props的第三种写法,函数形式
+ props($route) {
+ return {
+ id: $route.query.id,
+ title: $route.query.title
+ }
+ }
+ // 解构赋值的写法
+ // props({query:{id,title}}) {
+ // return {id, title}
+ // }
+ }
+ ]
+ }
+ ]
+ },
+ ]
+})
+
+// 全局前置路由守卫--初始化的时候被调用、每次路由切换之前被调用
+// router.beforeEach((to, from, next) => {
+// console.log('前置路由守卫', to, from)
+// // if (to.name === 'xinwen' || to.name === 'xiaoxi') {
+// // if (to.path === '/home/news' || to.path === '/home/message') {
+// if (to.meta.isAuth) {
+// if (localStorage.getItem('school') === 'atguigu') {
+// next()
+// }else{
+// alert('学校名称错误,无权限查看')
+// }
+// }else{
+// next()
+// }
+// })
+
+// 全局后置路由守卫--初始化的时候被调用、每次路由切换之后被调用
+// router.afterEach((to, from)=>{
+// console.log('后置路由守卫', to, from)
+// document.title = to.meta.title || '系统'
+// })
+
+export default router
\ No newline at end of file
diff --git a/20_脚手架/vue_code/src/pages/About.vue b/20_脚手架/vue_code/src/pages/About.vue
index 26560f1..31ab240 100644
--- a/20_脚手架/vue_code/src/pages/About.vue
+++ b/20_脚手架/vue_code/src/pages/About.vue
@@ -12,7 +12,24 @@ export default {
},
beforeDestroy() {
console.log('About组件即将销毁')
- }
+ },
+ // 通过路由规则进入该组件时被调用
+ beforeRouteEnter(to, from, next) {
+ console.log('APP---beforeRouteEnter')
+ if (to.meta.isAuth){
+ if (localStorage.getItem('school') === 'atguigu') {
+ next()
+ }else{
+ alert('学校名称错误,无权查看!')
+ }
+ }else{
+ next()
+ }
+ },
+ // 通过路由规则离开该组件时被调用
+ // beforeRouteLeave(to, from, next) {
+ //
+ // }
}
diff --git a/20_脚手架/vue_code/src/router/index.js b/20_脚手架/vue_code/src/router/index.js
index d86eda3..377bee1 100644
--- a/20_脚手架/vue_code/src/router/index.js
+++ b/20_脚手架/vue_code/src/router/index.js
@@ -15,7 +15,8 @@ const router = new VueRouter({
path: '/about',
component: About,
meta: {
- title: '关于'
+ title: '关于',
+ isAuth: true
}
},
{
@@ -34,14 +35,14 @@ const router = new VueRouter({
isAuth: true,
title: '主页'
},
- beforeEnter: (to,from,next)=>{
- console.log('独享路由守卫', to, from)
- if (localStorage.getItem('school') === 'atguigu'){
- next()
- }else{
- alert('学校名称不对,无权查看!')
- }
- }
+ // beforeEnter: (to,from,next)=>{
+ // console.log('独享路由守卫', to, from)
+ // if (localStorage.getItem('school') === 'atguigu'){
+ // next()
+ // }else{
+ // alert('学校名称不对,无权查看!')
+ // }
+ // }
},
{
name: 'xiaoxi',