vue - 路由精讲 - 代码抽离和复用router-view

vue

首先我们在src文件夹下建立一个routes.js文件,然后把   import 引入Home 组件开始,一直到三级路由中PersonName组件得代码和  const routers = [ ] 代码抽离到  routes.js 中。只要在抽离后的routes.js的代码  const routers = [ ]  前面加个export 表示公开,,就OJBK 了。同时,为了代码简洁,把  抛砖引玉 且  目前没有什么用的  全局守卫代码  删除。

main.js代码

 1 import Vue from 'vue'

2 import VueRouter from 'vue-router'

3 import App from './App.vue'

4 import Home from './components/Home.vue'

5 import Menu from './components/Menu.vue'

6 import Admin from './components/Admin.vue'

7 import About from './components/about/About.vue'

8 import Login from './components/Login.vue'

9 import Register from './components/Register.vue'

10

11 //二级路由

12 import Contact from './components/about/Contact.vue'

13 import Delivery from './components/about/Delivery.vue'

14 import History from './components/about/History.vue'

15 import OrderingGuide from './components/about/OrderingGuide.vue'

16

17 //三级路由

18 import Phone from './components/about/contact/Phone.vue'

19 import PersonName from './components/about/contact/PersonName.vue'

20

21

22

23

24 Vue.use(VueRouter)

25

26 const routes = [

27 {path:'/', name:'homeLink', component:Home},

28 {path:'/menu', name:'menuLink', component:Menu},

29 {path:'/admin', name:'adminLink', component:Admin},

30 {path:'/about', name:'aboutLink', redirect:'/about/contact', component:About, children:[

31 {path:'/about/contact', name:'contactLink', redirect:'/personName', component:Contact, children:[

32 {path:'/phone', name:"phoneNumber", component:Phone},

33 {path:'/personName', name:"personName", component:PersonName},

34 ]},

35 {path:'/history',name:'historyLink',component:History},

36 {path:'/delivery',name:'deliveryLink',component:Delivery},

37 {path:'/orderingGuide',name:'orderingGuideLink',component:OrderingGuide},

38 ]},

39 {path:'/login', name:'loginLink', component:Login},

40 {path:'/register', name:'registerLink', component:Register},

41 // {path:'*',redirect:'/'},

42 ]

43

44 const router = new VueRouter({

45 routes,

46 mode:'history'

47 })

48

49

50 // //全局守卫

51 // router.beforeEach((to,from,next)=>{

52 // // alert("还没有登录,请先登陆");

53 // // next();

54 // // console.log(to);

55

56 // //判断store.gettes.isLogin === false

57 // if(to.path == '/login' || to.path == '/register'){

58 // next();

59 // }else{

60 // alert("还没有登录,请先登陆");

61 // next('/login');

62 // }

63 // })

64

65 new Vue({

66 el: '#app',

67 router,

68 render: h => h(App)

69 })

 

routes.js 代码

 1 import Home from './components/Home.vue'

2 import Menu from './components/Menu.vue'

3 import Admin from './components/Admin.vue'

4 import About from './components/about/About.vue'

5 import Login from './components/Login.vue'

6 import Register from './components/Register.vue'

7

8 //二级路由

9 import Contact from './components/about/Contact.vue'

10 import Delivery from './components/about/Delivery.vue'

11 import History from './components/about/History.vue'

12 import OrderingGuide from './components/about/OrderingGuide.vue'

13

14 //三级路由

15 import Phone from './components/about/contact/Phone.vue'

16 import PersonName from './components/about/contact/PersonName.vue'

17

18

19 export const routes = [

20 {path:'/', name:'homeLink', component:Home},

21 {path:'/menu', name:'menuLink', component:Menu},

22 {path:'/admin', name:'adminLink', component:Admin},

23 {path:'/about', name:'aboutLink', redirect:'/about/contact', component:About, children:[

24 {path:'/about/contact', name:'contactLink', redirect:'/personName', component:Contact, children:[

25 {path:'/phone', name:"phoneNumber", component:Phone},

26 {path:'/personName', name:"personName", component:PersonName},

27 ]},

28 {path:'/history',name:'historyLink',component:History},

29 {path:'/delivery',name:'deliveryLink',component:Delivery},

30 {path:'/orderingGuide',name:'orderingGuideLink',component:OrderingGuide},

31 ]},

32 {path:'/login', name:'loginLink', component:Login},

33 {path:'/register', name:'registerLink', component:Register},

34 // {path:'*',redirect:'/'},

35 ]

抽离后的main.js代码

 1 import Vue from 'vue'

2 import VueRouter from 'vue-router'

3 import App from './App.vue'

4 import {routes} from './routes.js'

5

6 Vue.use(VueRouter)

7

8 const router = new VueRouter({

9 routes,

10 mode:'history'

11 })

12

13 new Vue({

14 el: '#app',

15 router,

16 render: h => h(App)

17 })

2.复用router-view

应用场景:比如我们想在  主页  中展示  历史订单   快递信息  点餐文档 这三个部分的信息,可以使用  router-view 复用。

具体步骤:在app.vue添加展示的内容,然后在routes.js 中   

 把原本的   componet:Home 展示的单个组件变成componets复数,然后一个对象{},在里面添加组件。

一进来就添加  default:Home,  组件, 然后再是添加需要展示的组件模块。具体代码如下

app.vue代码

 1 <template>

2 <div id="app">

3 <div class="container">

4 <app-header></app-header>

5 </div>

6

7 <div class="container">

8 <router-view></router-view>

9 </div>

10

11 <div class="container">

12 <div class="row"> //代表行

13 <div class="col-sm-12 col-md-4"> //小屏模式下展示12列,中屏展示四列。

14 <router-view name="orderingGuide"></router-view>

15 </div>

16 <div class="col-sm-12 col-md-4">

17 <router-view name="delivery"></router-view>

18 </div>

19 <div class="col-sm-12 col-md-4">

20 <router-view name="history"></router-view>

21 </div>

22 </div>

23 </div>

24 </div>

25 </template>

26

27 <script>

28 import Header from './components/Header.vue';

29 export default {

30 components:{

31 //"app-header":Header

32 appHeader:Header

33 }

34 }

35 </script>

36

37 <style>

38

39 </style>

 routes.js添加的代码

1 export const routes = [

2 {path:'/', name:'homeLink', components:{

3 default:Home,

4 'orderingGuide':OrderingGuide,

5 'delivery':Delivery,

6 'history':History

7 }},

8 {path:'/menu', name:'menuLink', component:Menu},

9 {path:'/admin', name:'adminLink', component:Admin},

以上是 vue - 路由精讲 - 代码抽离和复用router-view 的全部内容, 来源链接: utcz.com/z/374857.html

回到顶部