vue中vue-route

Vue路由是指:根据不同地址,创造不同页面。如单页面应用,不刷新整个页面,不频繁请求,请求数据,通过js操作(ajax),如:切换两个不同图片,不同地址,只需第一次需要请求,第2次共用请求资源,只需再请求一张图片即可

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。比如我点击关于 按钮,页面中怎么就正好能显示关于的内容。这就要在js 文件中配置路由。

路由中有三个基本的概念 route, routes, router。

    1, route,它是一条路由,由这个英文单词也可以看出来,它是单数, Home按钮  => home内容, 这是一条route,  about按钮 => about 内容, 这是另一条路由。

    2, routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。[{home 按钮 =>home内容 }, { about按钮 => about 内容}]

    3, router 是一个机制,相当于一个管理者,它来管理路由。因为routes 只是定义了一组路由,它放在哪里是静止的,当真正来了请求,怎么办? 就是当用户点击home 按钮的时候,怎么办?这时router 就起作用了,它到routes 中去查找,去找到对应的 home 内容,所以页面中就显示了 home 内容。

    4,客户端中的路由,实际上就是dom 元素的显示和隐藏。当页面中显示home 内容的时候,about 中的内容全部隐藏,反之也是一样。客户端路由有两种实现方式:基于hash 和基于html5 history api.

             vue中使用路由时要把路径和组件对应起来,然后在页面中把组件渲染出来

下面开始使用前端路由

1、在通过vue-cli安装的vue项目里安装前端路由, npm install vue-router --save  ,安装完后node_modules里面就有vue-router包了,pakage.json文件里也有

js文件配置

2、在入口文件src/mian.js。;在使用之前需要引入vue,import Vue from 'vue'。vue来自于模板提供的,从node_moudules中取 第一步: import VRouter from 'vue-router',第二步,要告诉 vue 使用 vueRoute。Vue.use(VRouter)

3、 创建映射关系,什么地址到什么页面,义route,  一条路由的实现。它是一个对象,由两个部分组成: path和component.  path 指路径,component 指的是组件。如:{path:’/home’, component:home}。定义一组路由routes,由组成一个路由组: 

const routes = [

  {path: '/home', component: Home },

  {path: '/about', component: About }

]

4、创建router 对路由进行管理,它是由构造函数 new vueRouter() 创建,接受routes 参数。

let router = new VueRouter({
  routes // routes: routes 的简写
})

5、配置完成后,把router 实例注入到 vue 根实例中,就可以使用路由了

const app = new Vue({

  el:'#app',

 router

})

最后:页面设置(html模版中

  在vue-router中, 它定义了两个标签<router-link> 和<router-view>来对应点击和显示部分。<router-link> 就是定义页面中点击的部分,<router-view> 定义显示部分,就是点击后,区配的内容显示在什么地方。所以 <router-link> 还有一个非常重要的属性 to,定义点击之后,要到哪里去, 如:<router-link  to="/home">Home</router-link>

执行过程:当用户点击 router-link 标签时,会去寻找它的 to 属性, 它的 to 属性和 js 中配置的路径{ path: '/home', component: Home}  path 一一对应,从而找到了匹配的组件, 最后把组件渲染到 <router-view> 标签所在的地方。所有的这些实现才是基于hash 实现的(即访问地址localhost:8080/#/apple localhost:8080/#/banana中有#号键)

当首次进入页面的时候,页面中并没有显示任何内容。这是因为首次进入页面时,它的路径是 '/',我们并没有给这个路径做相应的配置。一般,页面一加载进来都会显示home页面,我们也要把这个路径指向home组件。但是如果我们写{ path: '/', component: Home },vue 会报错,因为两条路径却指向同一个方向。这怎么办?这需要重定向,所谓重定向,就是重新给它指定一个方向,它本来是访问 / 路径,我们重新指向‘/home’, 它就相当于访问 '/home', 相应地, home组件就会显示到页面上。vueRouter中用 redirect 来定义重定向

// 重定向
    {
        path: '/', 
        redirect: '/home' 
    }


router参数——动态路由

       通常不同的用户(就是用户的id不同),它都会导航到同一个user  组件中。这样我们在配置路由的时候,就不能写死, 就是路由中的path属性,不能写死,那要怎么设置? 导航到 user 组件,路径中肯定有user, id 不同,那就给路径一个动态部分来匹配不同的id.  在vue-router中,动态部分 以 : 开头,那么路径就变成了 /user/:id, 这条路由就可以这么写:  { path:"/user/:id", component: user },类比这里的苹果组件,颜色为参数,路由这么写 { path: '/apple/:color', component: apple},

一、设置参数

const router = new VueRouter({

     mode:'history',

     routes:[

           //color作为参数传给当前home页面

          { path: '/apple/:color', component: apple},

           { path: '/banana', component: banana}

     ]

})

页面中改变,

<router-link to="/apple/red">apple</router-link>

<router-link to="/apple/green">apple</router-link>

二、在组件内部获取参数

设置了参数后,路由会往每个组件全局的router对象里插入当前页面的params,


添加了参数后,会匹配完整的带参数的路由,注入过来的参数,可以直接作为$route.params对象的属性,可通过$route.params.color访问

参数是一种很灵活的配置,带冒号的位置都是参数,不带引号的路径必须执行严格匹配


组件来回切换时,由于它们都是指向同一组件,vue不会销毁再创建这个组件,而是复用这个组件。组件的生命周期不管用了。这时如果想要在组件来回切换的时候做点事情,那么只能在组件内部(apple.vue中)利用watch 来监听$route 的变化。

<script>
    export default {
        data () {
            return {
                dySegment: ''
            }
        },
        watch: {
            $route (to,from){
                // to表示的是你要去的那个组件,from 表示的是你从哪个组件过来的,它们是两个对象,你可以把它打印出来,它们也有一个param 属性
                console.log(to);
                console.log(from);
                this.dySegment = to.params.id
            }
        }
    }
</script>
 
 

嵌套路由

嵌套路由,主要是由我们的页面结构所决定的。当我们进入到苹果页面的时候,它下面还有分类,苹果颜色。当我们点击各个分类的时候,它还是需要路由到各个部分,如点击手机,它肯定到对应到红苹果

的部分。

  在路由的设计上,首先进入到 apple,然后才能进入到RedApple等, 就相当于进入到了Apple

的子元素。所以vue  提供了childrens 属性,它也是一组路由,相当于我们所写的routes。

当我们进入apple页面时,它在children中对应的路由path 是空 '',要想点击apple时,要想渲染相对应的子组件,那还需要配置一条路由

在children数组下增加一条路由,如下

// 当进入到apple时,下面的组件显示
    {
        path: "",
        component: RedApple
    }


Router-link 简单跳转,直接用to加路径即可,to='/apple',前面若没有/,只有apple,则表示在当前路径跳转,有/则表示根目录。v-bind动态绑定的可以为对象,也可以为data里面绑定的,这个对象是{path:'/banana'}可以直接将参数自定义的传进来{path:'/banana'params:{color:’yellow’},}banana组件里就可以获取到这个color

   <router-link to='/apple/red'>to redapple</router-link>

   <router-link :to="{path:'/banana'}">tobanana</router-link>

   <router-link :to="{path:'/user'}">to user</router-link>

<router-link to='/apple'>to apple</router-link>

   


具名路由

根据名字就可以知道,这个路由有一个名字,那就直接给这个路由加一个name 属性,就可以了。 给user 路由加一个name 属性


命名路由的使用, 在router-link 中to 属性就可以使用对象了, 

 <router-link to="/apple/red">redApple</router-link> // 和下面等价 
 <router-link :to="{ name: 'applePalge', params: { color: red }}">User</router-link>   // 当使用对象作为路由的时候,to前面要加一个冒号,表示绑定



命名视图:

Router-view标签加name属性,在main.js,路由配置中,component里给不同的视图指定不同的组件


  Router-link默认渲染为a链接,若想在ul里面添加链接(导航),那么可以在<router-link标签里添加 tag=’li’

   在模板temple里面添加router-link是声明式导航,也可以在js里面添加编程式导航

  如每次路由切换时,可以为其设定一些操作(检查用户登录状态)

   Router.berforeEach(router.push({path:'/apple'}))


  过渡配合router-view使用

 

动态组件(keep-alive)配合router-view使用,切换过的视图进行缓存

当前导航会添加样式router-link-active,可在配置中更改这个样式的状态


猜你喜欢

转载自blog.csdn.net/qq_41802303/article/details/80091750