苍穹外卖前端Day1 | vue基础、Axios、路由vue-router、状态管理vuex、TypeScript

发布于:2025-09-09 ⋅ 阅读:(23) ⋅ 点赞:(0)

Vue基础回顾

1. 基于脚手架创建前端工程

安装环境检查

2024最新版Node.js下载安装及环境配置教程【保姆级】_nodejs下载-CSDN博客

两种创建项目方式

第二种方式更常用,但是两种方式创建出的项目结构是一样的

第一种方法:在想创建项目的根目录下输入 vue create 项目名称

第二种方法:在想创建项目的根目录下输入vue ui,进入UI网页界面

项目结构:

2. vue基本使用方式

例子:

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

基本语法

文本插值

可以使用简单的三目运算

以上的测试代码在HelloWorld.vue

<template>
  <div class="hello">
    {{ name }}
    {{ age > 60 ? '老年' : '青年 '}}

    <input type="text" v-bind:value="name"/>
    <input type="text" :value="age"/>
    <img :src="src">

    <input type="button" value="保存" v-on:click="handleSave"/>
    <input type="button" value="保存" @click="handleSave"/>

    <input type="text" v-model="name"/>
    <input type="button" value="修改name的值" @click="handleChange"/>

    <div v-if="sex == 1">
      男
    </div>
    <div v-else-if="sex == 2">
      女
    </div>
    <div v-else>
      未知
    </div>

  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  data() {
    return {
      name: '张三',
      age: 30,
      src: 'https://i-blog.csdnimg.cn/img_convert/bcd90b2d074ce6f358b63d4f53a44cc7.jpeg',
      sex: 1
    }
  },
  methods: {
    handleSave(){
      alert('你点击了保存按钮')
    },
    handleChange(){
      this.name = '李四'
    }
  }

}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

Axios

Axios 是一个基于 Promise 的 HTTP 客户端,可用于浏览器和 Node.js 环境,在前端开发中被广泛应用于发送 HTTP 请求、与后端 API 进行数据交互。

安装如下

尝试:不配置跨域解决方法,产生错误,原因是当前是在7070端口,而后端服务运行在8080端口

按照上面的方法配置可以解决跨域请求问题,修改vue.config.js文件,需要重启vue才能生效

编写get请求后会发生401错误,是因为需要JWT令牌token,所以从刚才POST方法中获得当前token,写到这个方法中

这次status可以正确请求,一开始测试不成功是因为redis没有开启,无法获取店铺营业状态

路由Vue-Router

1. 介绍

选择“手动创建”,勾选Router

不同的路径对应不同的组件展示

2. 路由配置

路由组成:路由器、路由链接组件、路由视图组件

在src/router/index.js中是路由路径和视图的对应关系,注意学习 静态引入/动态引入

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

// 维护路由表,某个路由路径对应哪个视图组件
const routes = [
  {
    path: '/',
    name: 'home',
    //静态引入,打包时组件打包到同一个js文件里面
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    // 懒加载,项目打包时,单独打包到一个js文件里面
    // 如果请求这个视图时才加载,否则不加载
    // 建议使用这个动态导入方式,性能更好一些
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  }
]

const router = new VueRouter({
  routes
})

export default router

路由链接组件,在App.vue,这是整个项目的入口

<template>
  <div id="app">
    <nav>
      <router-link to="/">Home</router-link>
      <router-link to="/about">About</router-link>
    </nav>
    <router-view/>
  </div>
</template>

路由跳转:标签式、编程式

3. 嵌套路由(子路由)

组件 | Element

基于ElementUI提供的快速上手攻略配置main.js文件

<el-container>
  <el-aside width="200px">Aside</el-aside>
  <el-container>
    <el-header>Header</el-header>
    <el-main>Main</el-main>
  </el-container>
</el-container>

配置嵌套路由:在index.js中配置children

状态管理vuex

1. vuex介绍

只能通过同步函数mutations修改state共享数据

2. 使用方式

定义和展示共享数据,在state中集中定义数据,在其他多组件都可以使用

修改共享数据

3. 异步操作和同步操作

对比:

维度 同步操作(Synchronous) 异步操作(Asynchronous)
执行方式 任务按顺序执行,前一个任务完成后,才执行下一个任务 任务发起后不等待结果,直接执行后续代码,结果通过 “回调 / 事件” 通知
阻塞性 会阻塞后续代码运行(“卡主” 程序) 不会阻塞后续代码运行(“并行” 处理)
结果获取时机 任务执行完成后,立即获取结果 任务后台执行,结果在未来某个时间点通过特定方式返回
典型场景 简单计算、变量赋值、同步读取本地文件 网络请求(Axios)、定时器(setTimeout)、异步 IO(数据库查询)
类型 优点 缺点 适用场景
同步操作 逻辑简单、线性执行、调试容易 阻塞线程,导致程序 “卡顿”(如长耗时 IO) 短耗时任务:简单计算、变量赋值、同步读取小文件
异步操作 不阻塞线程,提高程序响应速度 逻辑复杂(需处理回调 / Promise)、调试难 长耗时任务:网络请求、定时器、数据库查询、大文件读写
 执行队列:“单线程” 中的同步与异步(以 JavaScript 为例)

JavaScript 是单线程语言(同一时间只能执行一个任务),但通过 “事件循环(Event Loop)” 机制实现了异步操作,核心逻辑如下:

  • 同步任务:直接进入 “主线程” 执行,执行完一个再执行下一个,形成 “同步执行栈”。
  • 异步任务:不进入主线程,而是先进入 “任务队列”(Task Queue)等待;当主线程的同步任务全部执行完后,再从任务队列中取出异步任务的 “回调函数” 进入主线程执行。

TypeScript

1. TypeScript介绍

Vue框架源码是基于TS编写的

尝试编写ts代码并编译,故意传参传一个错误的类型

编译tsc hello.ts   执行 node hello.js

TS优点

2. TypeScript常用类型

只是在开发阶段使用TypeScript,实际项目上线需要将ts编译成js,编译之后的文件中类型会擦除

(类型擦除)

编译后的js文件

字面量类型 -- 类似于java的枚举

字面量类型用于限定数据的取值范围

interface类型

编译后的js文件中没有interface,类型擦除,只是为了编码过程中约束赋值

class类

编译之后没有class关键字

class类--实现接口implements

class类--类的继承extends

编译后


网站公告

今日签到

点亮在社区的每一天
去签到