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是一样的.
以上是 Vue.js之路由 的全部内容, 来源链接: utcz.com/z/380257.html