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是一样的.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM