重学vue(2, 3)及其生态+TypeScript 之 vue-router4.x(上)

简介: 重学vue(2, 3)及其生态+TypeScript 之 vue-router4.x

认识前端路由


路由的概念在软件工程中出现,最早是在后端路由中实现的,原因是web的发展主要经历了这样一些阶段:


  • 后端路由阶段。


  • 前后端分离阶段。


  • 单页面富应用(SPA)。 下面我们就来介绍一下这些阶段


后端路由阶段


早期的网站开发整个HTML页面是由服务器来渲染的。服务器直接生产渲染好对应的HTML页面, 返回给客户端进行展示。


但是, 一个网站, 这么多页面服务器如何处理呢?


每个页面都有对应的一个网址(url),用户在浏览器中输入对应的url,服务器将返回对应的完整页面。这种情况下渲染好的页面, 不需要单独加载任何的js和css, 可以直接交给浏览器展示, 这样也有利于SEO的优化。


后端路由的缺点:


  • 一种情况是整个页面的模块由后端人员来编写和维护的。


  • 另一种情况是前端开发人员如果要开发页面, 需要通过PHP和Java等语言来编写页面代码。


  • 而且通常情况下HTML代码和数据以及对应的逻辑会混在一起, 编写和维护都是非常糟糕的事情。


前后端分离阶段


这个阶段就是后端人员写数据接口,前端人员写页面。拿到数据接口渲染对应的页面。

前端渲染的理解:


每次请求涉及到的静态资源都会从静态资源服务器获取,这些资源包括HTML+CSS+JS,然后在前端对这些请求回来的资源进行渲染。需要注意的是,客户端的每一次请求,都会从静态资源服务器请求文件。同时可以看到,和之前的后端路由不同,这时后端只是负责提供API了。


前后端分离阶段:


随着Ajax的出现, 有了前后端分离的开发模式。后端只提供API来返回数据,前端通过Ajax获取数据,并且可以通过JavaScript将数据渲染到页面中。这样做最大的优点就是前后端责任的清晰,后端专注于数据上,前端专注于交互和可视化上。并且当移动端(iOS/Android)出现后,后端不需要进行任何处理,依然使用之前的一套API即可。目前比较少的网站采用这种模式开发(jQuery开发模式)。


SPA(single page application)单页面应用阶段


一个应用有多个页面,需要切换展示时,我们前端自己维护一个路由映射表。我们通过改变hash或者通过HTML5提供的history模式。这两种模式修改url。不会向服务器请求资源。就可以映射到不同的页面了。


改变hash,实现前端路由


通过hashchange监听hash的变化(location.href来改变),来改变占位内容。


了解更多location的内容,请访问mdn: developer.mozilla.org/zh-CN/docs/…


<div id="app">
        <a href="#/home">home</a>
        <a href="#/about">about</a>
        <div id="content">Default</div>
      </div>
      <script>
        const contentEl = document.getElementById("content")
        window.addEventListener("hashchange", () => {
          switch(location.hash) {
            case "#/home":
              contentEl.innerHTML = "Home";
              break;
            case "#/about":
              contentEl.innerHTML = "About";
              break;
            default:
              contentEl.innerHTML = "Default";
          }
        })
      </script>


网络异常,图片无法展示
|


hash的优势就是兼容性更好,在老版IE中都可以运行,但是缺陷是有一个#,显得不像一个真实的路径。


history模式实现前端路由


history接口是HTML5新增的, 它有六种模式改变URL而不刷新页面:


  • replaceState:替换原来的路径。


  • pushState:使用新的路径。


  • popState:路径的回退。


  • go:向前或向后改变路径。


  • forward:向前改变路径。


  • back:向后改变路径。 下面就来简单实现以下


<a href="/zh">zh</a>
      <a href="/llm">llm</a>
      <div id="container">我是默认页面</div>
      <script>
        const container = document.getElementById("container");
        const aEls = document.getElementsByTagName("a");
        const changeContent = () => {
          switch (location.pathname) {
            case "/zh":
              container.innerHTML = "我是zh页面"
              break;
            case "/llm":
              container.innerHTML = "我是llm页面"
              break;
            default:
              container.innerHTML = "我是其他页面"
              break;
          }
        }
        for (let a of aEls) {
          a.addEventListener("click", (e) => {
            e.preventDefault();
            const href = a.getAttribute("href");
            // 将路由保存到对应栈中
            history.pushState({}, "", href)
            changeContent()
          })
        }
        // 监听出栈状态
        addEventListener("popstate", changeContent)


网络异常,图片无法展示
|


vue-router


通过上面的介绍,我们现在来介绍一下vue-router吧。


Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得非常容易。目前Vue路由最新的版本是4.x版本。


vue-router是基于路由和组件的。路由用于设定访问路径, 将路径和组件映射起来。在vue-router的单页面应用中, 页面的路径的改变就是组件的切换。


安装Vue Router:npm install vue-router@4


路由的基本使用步骤


  • 创建路由组件的组件。


  • 配置路由映射: 组件和路径映射关系的routes数组。


  • 通过createRouter创建路由对象,并且传入routes和history模式。


  • 使用路由通过<router-link>(切换到指定的组件) 和<router-view>(切换路径,他就自动匹配到对应的组件)。


  • 并将router对象在app.use中注册。 下面我们来介绍一下routes(路由组件映射表)

路由的映射,只会匹配到第一个准确的路径,当匹配到多个路径时,只会展示第一个匹配到的路径的组件


  • path: 配置路由路径


  • redirect: 重定向。参数重定向的路由路径。


{
        path: "/",
        redirect: "/home"
      }


  • children: 配置子路由。一个数组。每个数组元素都是一个route。


  • alias: 配置路由别名。string | string[]。可以简化牵头路由的路径。


{
        path: "/home",
        name: "home",
        component: () => import("../pages/Home.vue"),
        children: [
          {
            path: "message",
            component: () => import("../pages/HomeMessage.vue"),
            // 配置别名 /home/message = /zh = '/home/message'
            alias: ['/zh', 'zh']
          }
        }
     }


  • name: 该路由匹配的名称。(唯一)


  • beforeEnter: 当匹配到该路由时,调用的钩子。在进入特定于此记录的守卫之前。注意如果记录有重定向属性,则 beforeEnter 无效。


  • props: 传入一个Boolean, 用来给由router-view渲染的组件传递动态路由值。以至于不需要使用$route.params.参数


const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}
const routes = [{ path: '/user/:id', component: User }]


替换成


const User = {
  props: ['id'],
  template: '<div>User {{ id }}</div>'
}
const routes = [{ path: '/user/:id', component: User, props: true }]


  • meta: 在记录上附加自定义数据。


const routes = [
        { 
            path: '/user/:id', 
            component: User, 
            meta: {name: 'zh'} 
        }
    ]


一个简单的路由映射


//route/index.js
    import { createRouter, createWebHistory } from "vue-router"
    import About from '../components/About.vue'
    const Home = () => import("../components/Home.vue")
    const routes = [
      { path: "/", redirect: "/home" },
      {
        path: "/home",
        name: "home",
        component: Home
      },
      {
        path: "/about",
        name: "about",
        component: About
      }
    ]
    export default router = createRouter({
      history: createWebHistory(),
      routes: routes
    })


相关文章
|
2月前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
72 0
|
2月前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战
|
3月前
|
JavaScript 前端开发
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
42 0
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
|
4月前
|
JavaScript 安全 前端开发
Vue 3 中的 TypeScript
【6月更文挑战第15天】
75 6
|
5月前
|
JavaScript 前端开发 开发者
类型检查:结合TypeScript和Vue进行开发
【4月更文挑战第24天】TypeScript是JavaScript超集,提供类型注解等特性,提升代码质量和可维护性。Vue.js是一款高效前端框架,两者结合优化开发体验。本文指导如何配置和使用TypeScript与Vue:安装TypeScript和Vue CLI,创建Vue项目时选择TypeScript支持,配置`tsconfig.json`,编写`.tsx`组件,最后运行和构建项目。这种结合有助于错误检查和提升开发效率。
50 2
|
5月前
|
JavaScript 前端开发 开发者
Vue工具和生态系统: Vue.js和TypeScript可以一起使用吗?
【4月更文挑战第18天】Vue.js与TypeScript兼容,官方文档支持在Vue项目中集成TypeScript。TypeScript作为JavaScript超集,提供静态类型检查和面向对象编程,增强代码准确性和健壮性。使用TypeScript能提前发现潜在错误,提升代码可读性,支持接口和泛型,使数据结构和函数更灵活。然而,不是所有Vue插件都兼容TypeScript,可能需额外配置。推荐尝试在Vue项目中使用TypeScript以提升项目质量。
107 0
|
5月前
|
JavaScript 前端开发
在Vue中使用TypeScript的常见问题有哪些?
在Vue中使用TypeScript的常见问题有哪些?
89 2
|
1月前
|
JavaScript
typeScript进阶(9)_type类型别名
本文介绍了TypeScript中类型别名的概念和用法。类型别名使用`type`关键字定义,可以为现有类型起一个新的名字,使代码更加清晰易懂。文章通过具体示例展示了如何定义类型别名以及如何在函数中使用类型别名。
36 1
typeScript进阶(9)_type类型别名
|
9天前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
18 0
|
9天前
|
JavaScript 前端开发 开发者
深入理解TypeScript:类型系统与实用技巧
【10月更文挑战第8天】深入理解TypeScript:类型系统与实用技巧