diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/App.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/App.vue
new file mode 100644
index 0000000..14872a9
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/App.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+ About
+ Home
+
+
+
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/assets/logo.png b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/assets/logo.png
new file mode 100644
index 0000000..f3d2503
Binary files /dev/null and b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/assets/logo.png differ
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/components/Banner.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/components/Banner.vue
new file mode 100644
index 0000000..ab3725d
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/components/Banner.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/main.js b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/main.js
new file mode 100644
index 0000000..9c406ac
--- /dev/null
+++ b/20_脚手架/vue_code/36.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/36.src_路由的前置守卫和后置守卫/pages/About.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/About.vue
new file mode 100644
index 0000000..26560f1
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/About.vue
@@ -0,0 +1,21 @@
+
+ 我是About的内容
+
+
+
+
+
\ No newline at end of file
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Detail.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Detail.vue
new file mode 100644
index 0000000..95ef4fa
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Detail.vue
@@ -0,0 +1,17 @@
+
+
+ - 消息编号:{{id}}
+ - 消息标题:{{title}}
+
+
+
+
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Home.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Home.vue
new file mode 100644
index 0000000..9436f2f
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Home.vue
@@ -0,0 +1,40 @@
+
+
+
Home组件内容
+
+
+ -
+ News
+
+ -
+ Message
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Message.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Message.vue
new file mode 100644
index 0000000..746f387
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/Message.vue
@@ -0,0 +1,68 @@
+
+
+
+ -
+
+
+
+
+ {{ m.title }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/News.vue b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/News.vue
new file mode 100644
index 0000000..e6e997a
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/pages/News.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/router/index.js b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/router/index.js
new file mode 100644
index 0000000..caa5254
--- /dev/null
+++ b/20_脚手架/vue_code/36.src_路由的前置守卫和后置守卫/router/index.js
@@ -0,0 +1,99 @@
+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: '关于'
+ }
+ },
+ {
+ name: 'zhuye',
+ path: '/home',
+ component: Home,
+ meta: {
+ title: '主页'
+ },
+ children: [
+ {
+ name: 'xinwen',
+ path: 'news',
+ component: News,
+ meta: {
+ isAuth: true,
+ title: '主页'
+ }
+ },
+ {
+ 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/router/index.js b/20_脚手架/vue_code/src/router/index.js
index b5c9337..caa5254 100644
--- a/20_脚手架/vue_code/src/router/index.js
+++ b/20_脚手架/vue_code/src/router/index.js
@@ -8,29 +8,49 @@ import Message from "@/pages/Message.vue";
import Detail from "@/pages/Detail.vue";
// 创建一个路由器
-export default new VueRouter({
+const router = new VueRouter({
routes: [
{
name: 'guanyu',
path: '/about',
- component: About
+ component: About,
+ meta: {
+ title: '关于'
+ }
},
{
+ name: 'zhuye',
path: '/home',
component: Home,
+ meta: {
+ title: '主页'
+ },
children: [
{
+ name: 'xinwen',
path: 'news',
component: News,
+ meta: {
+ isAuth: true,
+ title: '主页'
+ }
},
{
+ 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
@@ -53,3 +73,27 @@ export default new VueRouter({
},
]
})
+
+// 全局前置路由守卫--初始化的时候被调用、每次路由切换之前被调用
+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