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 @@ + + + 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 @@ + + + + + \ 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 @@ + + + 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 @@ + + + + + \ 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 @@ + + + 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