vue-router 路由配置的四个方法

🥝 前端路由的特点:

❤️优点:
用户体验好,不需要每次都从服务器全部获取,可以快速展现给用户。
💔缺点:
👋 不利于SEO。
👋 使用浏览器的前进后退时回重新发送请求,没有合理地利用缓存。
👋 单页面无法记住之前滚动的位置,无法在前进、后退的时候记住滚动的位置。

🥝 vue-router的基本使用

资料原文
路由其实就是“指向”的意思,当我点击页面上的home按钮时,页面上就要显示出home的内容,如果点击页面上的about按钮,页面上就要显示出about的内容。点击之后,怎么做到正确的对应,比如,我点击home按钮,页面上怎么正好能显示home的内容。这就要在js文件中配置路由。

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

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

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

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

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

🥝 vue-router路由两种实现途径

在vue中实现路由还是相对简单的。因为我们页面中所有内容都是组件化的,我们只要把路径和组件对应起来就可以了,然后在页面中把组件渲染出来。

1⃣️页面实现(html模版中)

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

2⃣️js 中配置路由

首先要定义route, 一条路由的实现。它是一个对象,由两个部分组成: path和component. path 指路径,component 指的是组件。如:{path:’/home’, component: home}
我们这里有两条路由,组成一个routes:

const routes = [
  { path: '/home', component: Home },
  { path: '/about', component: About }
]

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

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

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

const app = new Vue({
  router
}).$mount('#app')

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

🥝 动态路由

上面我们定义的路由,都是严格匹配的,只有router-link 中的to属性和 js 中一条路由route中 path 一模一样,才能显示相应的组件component. 但有时现实却不是这样的,当我们去访问网站并登录成功后,它会显示 欢迎你+ 你的名字。不同的用户登录, 只是显示“你的名字” 部分不同,其它部分是一样的。

我们经常需要把某种模式匹配到的所有路由,全部映射到同一个组件。例如,有一个User组件,对于所有ID各不相同的用户,都要用这个组件来渲染。那么,我们可以在vue-router的路由路径中使用【动态路径参数】。

当使用路由参数时,例如从/user/foo导航到/user/bar,原来的组件实例会被复用。因为两个路由都渲染同一个组件,比起销毁再创建,复用则显得更加高效。这也意味着组件的生命周期钩子不会再被调用。
例如:

const User = {
    template: '<div>User</div>
}

const router = new VueRouter({
    routes: [
        // 动态路径参数,以冒号开头
        { path: '/user/:id', component: User }
    ]
})

🥝 嵌套路由

嵌套路由,主要是由我们的页面结构所决定的。当我们进入到home页面的时候,它下面还有分类,如手机系列,平板系列,电脑系列。当我们点击各个分类的时候,它还是需要路由到各个部分,如点击手机,它肯定到对应到手机的部分。

在路由的设计上,首先进入到 home ,然后才能进入到phone, tablet, computer. Phone, tablet, compute 就相当于进入到了home的子元素。所以vue 提供了childrens 属性,它也是一组路由,相当于我们所写的routes。
例如:

const routes = [
    {
        path:"/home",
     // 下面这个属性也不少,因为,我们是先进入home页面,才能进入子路由
        component: home,
     // 子路由
        children: [
            {
                path: "phone",
                component: phone
            },
            {
                path: "tablet",
                component: tablet
            },
            {
                path: "computer",
                component: computer
            }
        ]
    }
];
🥝 命名路由

命名路由,很简单,因为根据名字就可以知道,这个路由有一个名字,那就直接给这个路由加一个name 属性,就可以了。 给user 路由加一个name 属性:

{
        path: "/user/:id",
        name: "user",
        component: user
}

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

 <router-link to="/user/123">User123</router-link> // 和下面等价 
 <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>  
 // 当使用对象作为路由的时候,to前面要加一个冒号,表示on-bind绑定,否则会被当成对象
🥝 编程式路由

除了使用< router-link >创建a标签来定义导航链接,还可以借助router的实例方法,通过编写代码实现。

想要导航到不同的URL,则使用router.push方法。这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,则回到之前的URL.

当点击< router-link >时,这个方法会在内部调用,所以说,点击< router-link :to=”…”>等同于调用router.push(…)

语法 this.$router.history.push('要跳转路由的地址'),push里面的参数有三种写法,如下:

<script>
    export default {
        methods:{
            toCart(){
                //this.$router.push("/carts");
                //this.$router.push({path:"/carts"});
                this.$router.push({path:"/carts?a=123"});
            }
        }
    }
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容