Vue.js之路由

Vue.js之路由

 

  以前的跳转都是使用a标签,a标签里有一个属性叫href,给他一个对应的网络地址或者一个路径的话,它就会帮助跳转到对应的页面。

  Vue.js的路由,其实跟我们的a标签实现的功能是一样的,我们也是实现一个对应的跳转,只不过路由的性能更优化,a标签不管点击多少次,都会发生对应的网络请求,页面会不停地进行页面刷新,但是路由不一样,只要使用路由机制的话,你只要点击之后,他不会出现我们的请求以及页面刷新,直接就转换到你要去的地址,这是我们使用路由的好处。

  要使用路由,需要先安装路由模块,在IDE的Terminal中输入这句话: npm install vue-router
–save-dev 来安装。
  安装路由模块以后就可以在项目里使用路由了。

  使用路由首先要在main.js当中进行设置,通过 import VueRouter from
‘vue-router’ 将我们的路由模块先引进来,然后在下面通过 Vue.use(VueRouter) 使用一下引用进来的模块。
  使用路由以后就可以在下面进行配置路由了:

1 const router = new  VueRouter({
2   routes:[
3     {path:'/',component:Home},
4     {path:'/helloworld',component:HelloWorld}
5   ],
6   mode:"history"
7 })

  path是要路由的地址,component是抓取到地址后要跳转到的组件。这里要跳转到的组件也要在main.js中引入. 

 例如: import
HelloWorld from ‘./components/HelloWorld’ 和 import Home from
‘./components/Home’ 

 

一个小demo

 

  main.js文件:

 1 import Vue from 'vue'
 2 import VueRouter from 'vue-router'
 3 import App from './App'
 4 import HelloWorld from './components/HelloWorld'
 5 import Home from './components/Home'
 6 
 7 Vue.config.productionTip = false
 8 Vue.use(VueRouter)
 9 
10 //配置路由
11 const router = new  VueRouter({
12   routes:[
13     {path:'/',component:Home},
14     {path:'/helloworld',component:HelloWorld},
15   ],
16   mode:"history"
17 })
18 
19 new Vue({
20   router,
21   el: '#app',
22   components: { App },
23   template: '<App/>'
24 })

正规网赌平台,  要在路由中加 mode:”history“ ,否则项目地址会多出 localhost:8080/#/ ,会影响我们项目的功能。

  Home.vue文件:

 1 <!--模板-->
 2 <template>
 3   <div id="home">
 4     <app-header @titleChanged="updateTitle($event)" :title="title"></app-header>
 5     <users :users="users"></users>
 6     <app-footer></app-footer>
 7   </div>
 8 </template>
 9 
10 <!--行为-->
11 <script>
12   //局部注册组件
13   import Users from './Users'
14   import Header from './Header'
15   import Footer from './Footer'
16 
17   export default {
18     name: 'home',
19     data(){
20       return {
21         users:[
22           {name:"Henry",Position:"Java工程师",show:false},
23           {name:"Lily",Position:"Java工程师",show:false},
24           {name:"Kang",Position:"Java工程师",show:false},
25           {name:"Henry",Position:"Java工程师",show:false},
26           {name:"Henry",Position:"Java工程师",show:false}
27         ],
28         title:"这是一个title!"
29       }
30     },
31     methods:{
32       updateTitle:function (title) {
33         this.title = title;
34       }
35     },
36     components:{
37       "users":Users,
38       "app-header":Header,
39       "app-footer":Footer
40     }
41 
42   }
43 </script>
44 
45 <!--样式-->
46 <style >
47 
48   h1{
49     color: pink;
50   }
51 </style>

 

HelloWorld.vue文件:

 1 <template>
 2   <div class="hello">
 3       hello,world!
 4   </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9   name: 'HelloWorld',
10   data () {
11     return {
12     }
13   }
14 }
15 </script>
16 
17 <!-- Add "scoped" attribute to limit CSS to this component only -->
18 <style scoped>
19 
20 </style>

  Header.vue文件:

 1 <template>
 2   <header @click="changeTitle">
 3     <h1>{{title}}</h1>
 4   </header>
 5 </template>
 6 
 7 <script>
 8   export default {
 9     name: 'app-header',
10     data () {
11       return {
12         title1:"Vue.js Demo"
13       }
14     },
15     props:{
16       title:{
17         type:String
18       }
19     },
20     methods:{
21       changeTitle:function(){
22         this.$emit("titleChanged","子向父组件传值");
23       }
24     }
25   }
26 </script>
27 
28 <style scoped>
29 header{
30   background: pink;
31   padding: 10px;
32 }
33 h1{
34   color: #222;
35   text-align: center;
36   }
37 </style>

  Footer.vue文件:

 1 <template>
 2   <footer>
 3     <p>{{copyright}}</p>
 4   </footer>
 5 </template>
 6 
 7 
 8 <script>
 9   export default {
10     data () {
11       return {
12         copyright:"Copyright 2018 Vue Demo"
13       }
14     }
15   }
16 </script>
17 
18 <style scoped>
19   footer{
20     background: #666;
21     padding: 6px;
22   }
23   footer p{
24     color: pink;
25     text-align: center;
26   }
27 </style>

  User.vue文件:

 1 <template>
 2   <div class="users">
 3     <ul>
 4       <li v-for="user in users"
 5           @click="user.show = !user.show">
 6         <h2 >{{user.name}}</h2>
 7         <h3 v-show="user.show">{{user.Position}}</h3>
 8       </li>
 9     </ul>
10   </div>
11 </template>
12 
13 <script>
14   export default {
15     name: 'users',
16     // props:['users']
17     props:{
18       users:{
19         type:Array,
20         required:true
21       }
22     }
23   }
24 </script>
25 
26 <style scoped>
27 .users{
28   width: 100%;
29   max-width: 1200px;
30   margin:40px auto;
31   padding: 0 20px;
32   box-sizing: border-box;
33 }
34 ul{
35    display: flex;
36   flex-wrap: wrap;
37   list-style-type: none;
38   padding: 0;
39   }
40 li{
41   flex-grow: 1;
42   flex-basis: 200px;
43   text-align: center;
44   padding: 30px;
45   border: 1px solid #666;
46   margin: 10px;
47 }
48 </style>

  然后在App.vue文件中加入导航;

App.vue文件:

 1 <!--模板-->
 2 <template>
 3   <div id="app">
 4     <ul>
 5       <li><a href="/">Home</a></li>
 6       <li><a href="/helloworld">Hello</a></li>
 7       <li> <router-link to="/">Home</router-link> </li>
 8       <li> <router-link to="/helloworld">Hello</router-link> </li>
 9     </ul>
10     <router-view></router-view>
11   </div>
12 </template>
13 <!--行为-->
14 <script>
15 
16 export default {
17   name: 'App',
18   data(){
19     return {
20     }
21   },
22   methods:{
23   }
24 }
25 </script>
26 <!--样式-->
27 <style >
28 
29 </style>

  这里如果使用 <a href=””></a> 标签,点击时候会跳转和刷新页面,而使用路由 <router-link to=””></router-link> 则不会,to跟a标签里的href是一样的.

 

相关文章