Vue.js之路由

vue

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

回到顶部