【Day 3】Ajax + Vue 项目、路由 + Nginx

1 Ajax

Asynchronous JavaScript And XML

异步的 JavaScript 和 XML

作用:

  • 数据交换

        通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据

  • 异步交互

        可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等

1.1 原生的异步请求

使用 XMLHttpRequest 进行异步请求:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="button" value="get data" onclick="getData()"><div id="div1"></div>
</body>
<script>function getData() {// 第一步 创建 XMLHttpRequestvar xmlHttpRequest = new XMLHttpRequest();// 第二步 发送异步请求xmlHttpRequest.open("GET", "https://mock.apifox.cn/m1/3128855-0-default/emp/list");xmlHttpRequest.send();xmlHttpRequest.onreadystatechange = function () {if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {document.getElementById("div1").innerHTML = xmlHttpRequest.responseText;}}}
</script></html>

 这是 HTML 自带的异步请求,比较繁琐

1.2 Axios

Axios 对原生的 Ajax 进行了封装,简化书写,快速开发

Axios 用法:

        1. 引入 Axios

<script src="js/axios-0.18.0.js"></script>

         2. 使用 Axios 发送请求,并获取响应结果

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="JS/axios-0.18.0.js"></script>
</head><body><input type="button" value="get data" onclick="getData()"><br><br><input type="button" value="delete data" onclick="deleteData()">
</body>
<script>function getData() {axios({method: "get",url: "https://mock.apifox.cn/m1/3128855-0-default/emp/list",}).then(result => {console.log(result.data);})}function deleteData() {axios({method: "post",url: "https://mock.apifox.cn/m1/3128855-0-default/emp/deleteById",data: "id=1"}).then(result => {console.log(result.data);})}</script></html>

这和原生方法是一致的

1.3 Axios 请求方式别名

  • axios.get(url[,config])
  • axios.delete(url[,config])
  • axios.post(url[,data[,config]])
  • axios.put(url[,data[,config]])

注:方括号为可选参数

这样可以对上面进行简化:

  • 发送 get 请求
axios.get("https://mock.apifox.cn/m1/3128855-0-default/emp/list").then((result)=>{console.log(result.data);})
  •  发送 post 请求
axios.post("https://mock.apifox.cn/m1/3128855-0-default/emp/deleteById","id=1").then((result)=>{console.log(result.data);})

2 案例一


 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="JS/axios-0.18.0.js"></script><script src="JS/vue.js"></script><style>table{border-collapse: collapse;}th,td{border: 1px solid black;text-align: center;}</style>
</head><body><table id="app"><tr><th>id</th><th>name</th><th>img</th><th>gender</th><th>job</th><th>entrydate</th><th>updatetime</th></tr><tr v-for="(emp, index) in emps"><td>{{index+1}}</td><td>{{emp.name}}</td><td><img v-bind:src="emp.image" width="30px" height="30px"></td><td><span v-if="gender == 1">male</span><span v-else>female</span></td><td>{{emp.job}}</td><td>{{emp.entrydate}}</td><td>{{emp.updatetime}}</td></tr></table>
</body>
<script>new Vue({el: "#app",data: {emps: []},mounted() {// 发送异步请求,加载数据axios.get("https://mock.apifox.cn/m1/3128855-0-default/emp/list").then((result) => {this.emps = result.data.data;})},})
</script></html>

3 YAPI

接口管理平台

4 前端工程化

Vue-cli:Vue 官方提供的一个脚手架,用于快速生成一个 Vue 的项目模板

功能:

  • 统一的目录结构
  • 本地调试
  • 热部署
  • 单元测试
  • 继承打包上线

依赖环境:NodeJS

4.1 Vue 项目

在 cmd 中 vue ui,就在当前文件夹下创建了 vue project

vue项目的目录结构:

 Vue项目的启动:

运行:

Local 的 URL 打开是:

 而且在 APP.vue 中进行修改,保存之后,页面也会更改----->热部署

但是默认端口号是8080,与后面的 Tomcat 冲突,所以现在改变一下 Vue 的端口号:

在 config 下增加:

4.2 Vue 开发流程

注:

  1. .$mount '#app' 和 之前的 el 是等价的,都是挂载到 DOM 元素
  2. router:router,如果对象和对象值相同,则可以省略冒号和值
  3. h 是一个虚拟 DOM 元素

.vue 文件:

4.3 Vue 的 Element 组件库

Element 是基于 Vue 2.0 的桌面端组件

组件:组成网页的部件,例如 超链接、按钮、图片、表格、表单、分页条等

Element - The world's most popular Vue UI framework

注:安装时在当前目录下安装,右键-在集成终端打开,然后输入npm install ...

 

 还有很多组件都在官方文档

5 案例一

 EmpView.vue 文件

<template><div><el-container style="height: 500px; border: 1px solid #eee"><el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">tlias 智能学习辅助系统</el-header><el-container><el-aside width="230px" style="border: 1px solid #eee"><el-menu :default-openeds="['1', '3']"><el-submenu index="1"><template slot="title"><i class="el-icon-message"></i>系统信息管理</template><el-menu-item index="1-1">部门管理</el-menu-item><el-menu-item index="1-2">员工管理</el-menu-item></el-submenu></el-menu></el-aside><el-main><!-- 表单 --><el-form :inline="true" :model="searchForm"><el-form-item label="姓名"><el-input v-model="searchForm.name" placeholder="姓名"></el-input></el-form-item><el-form-item label="性别"><el-select v-model="searchForm.gender" placeholder="性别"><el-option label="男" value="1"></el-option><el-option label="女" value="2"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item><el-form-item label="入职日期"><div class="block"><span class="demonstration">从</span><el-date-picker v-model="searchForm.entrydate" type="daterange" range-separator="至"start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker></div></el-form-item></el-form><!-- 表格 --><el-table :data="tableData" border><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="image" label="图像"><template slot-scope="scope"><img :src="scope.row.image" width="80px"></template></el-table-column><el-table-column label="性别"><template slot-scope="scope">{{ scope.row.gender==1?"男":"女" }}</template></el-table-column><el-table-column prop="position" label="职位"></el-table-column><el-table-column prop="entrydate" label="入职日期"></el-table-column><el-table-column prop="updatetime" label="最后操作时间"></el-table-column><el-table-column label="操作"><el-button type="primary" size="mini">编辑</el-button><el-button type="danger" size="mini">编辑</el-button></el-table-column></el-table><br><!-- 分页条 --><el-pagination background layout="prev, pager, next" :total="1000"></el-pagination></el-main></el-container></el-container></div>
</template><script>
import axios from 'axios';export default {data() {return {tableData: [],searchForm: {name: "",gender: "",entrydate: []}}},methods: {onSubmit: function () {alert("submit");}},mounted() {axios.get("https://mock.apifox.cn/m1/3128855-0-default/emp/list").then((result) => {this.tableData = result.data.data;})}
}
</script><style></style>

现在不能页面跳转,只是静态页面,想要动态跳转---->路由

6 Vue 路由

前端路由: URL 中的 hash(#号)与组件之间的对应关系

点击一个按钮,直接在地址栏的URL改变

地址栏发生改变,路由自动更新显示与 URL 有关的组件

Vue Router

组件:

<router-link to="/..">

请求链接组件,浏览器会解析成 <a>

<router-view></router-view>

动态视图组件,用来渲染展示与路由路径对应的组件

6.1 配置路由

(在 views 里面又加了一个 vue 文件 DeptView.vue )

变成了:

然后在 APP.vue

注释掉不用的代码

使用 <router-view></router-view>

 

效果:(注意 URL 的变化)

点击部门管理:

 点击员工管理:

最后设置一个根路径,以便第一次进入的时候不会不显示

重定向( redirect )

7 打包部署

前后端项目需要分别在前后端服务器上部署,在此之前需要打包

7.1 打包

打包完成,出现 dist(distribution)文件夹

7.2 部署

        Nginx:是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的使用

可以用 Nginx 做:部署静态资源反向代理实现负载均衡

下面以部署静态资源为例:

官网:nginx news

将打包好的 dist 目录下的文件,复制到 nginx 的 html 目录下

双击 nginx 可执行文件,Nginx 服务器占用 80 端口号

注意事项:Nginx 默认占用80端口号,如果80端口号被占用,可以在 nginx.conf 中修改端口号

部署完成后,在浏览器输入

localhost:80

出现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

文章目录 一. AI中大语言模型的位置与技术发展1. 从AI到Transformer2. NLP&#xff1a;自然语言处理3. LLM大型语言模型&#xff1a;NLP的一种特定技术3.1. LLM定义3.2. LLM的技术发展3.2.1. n-gram模型3.2.2. RNN与LSTM 二. Transformer在LLM中脱颖而出1. Transformer架构能力…

编译一个基于debian/ubuntu,centos,arhlinux第三方系统

目录 前言 准备工作 下载linux源码进行编译 linux源码下载 网站 问题 解决办法 编译 可能会遇到的问题 chroot下载debian环境 进入虚拟环境 把chroot的根目录文件打包为.gz文件 编译init文件&#xff08;用于系统启动时的一系列引导&#xff09; 给予文件夹权限 …

碎碎笔记01

凹凸性 一元函数 凸函数&#xff1a;二阶导数>0 f ( x ) x 2 f(x) x^2 f(x)x2的二阶导数是 2&#xff0c;>0凹函数&#xff1a;二阶导数<0 驻点&#xff0c;拐点 驻点&#xff1a;增减性的交替点 拐点&#xff1a;凹凸性的交替点 脑补 f ( x ) s i n x f(x) …

【树莓派学习】hello,world!

系统安装及环境配置详见【树莓派学习】系统烧录及VNC连接、文件传输-CSDN博客 树莓派内置python3&#xff0c;可以直接利用python输出。

Docker 部署 MongoDB 数据库

文章目录 官网地址docker 网络mongod.conf部署 MongoDB部署 mongo-expressdocker-compose.ymlMongoDB shell 官网地址 https://www.mongodb.com/zh-cn docker 网络 # 创建 mongo_network 网络 docker network create mongo_network # 查看网络 docker network list # 容器连…

Don‘t fly solo! 量化之路,AI伴飞

在投资界&#xff0c;巴菲特与查理.芒格的神仙友谊&#xff0c;是他们财富神话之外的另一段传奇。巴菲特曾这样评价芒格&#xff1a;他用思想的力量拓展了我的视野&#xff0c;让我以火箭的速度&#xff0c;从猩猩进化到人类。 人生何幸能得到一知己。如果没有这样的机缘&…

【C++初阶】List使用特性及其模拟实现

1. list的介绍及使用 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前…

学习在Debian系统上安装Shadowsocks教程

学习在Debian系统上安装Shadowsocks教程 安装shadowsocks-libev及其所需的依赖启动Shadowsocks服务&#xff1a;如果你想要通过代理本地流量&#xff0c;你可以使用ss-local&#xff1a;启动并设置ss-local&#xff1a;查看状态本地连接 安装shadowsocks-libev及其所需的依赖 …

如何创建响应式HTML电子邮件模板

在这个适合初学者的指南中&#xff0c;你将学习如何创建一个响应式电子邮件模板。你将跟随逐步说明以及代码片段设计一个在任何设备上都看起来很棒的电子邮件模板。 这个项目非常适合渴望掌握电子邮件设计基础的新手&#xff01; &#xff08;本文视频讲解&#xff1a;java56…

力扣112,路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指没有子节点…

Python 比较文本文件

1、问题背景 我们需要比较一个文本文件 F 与路径下多个其他文本文件之间的差异。我们已经编写了以下代码&#xff0c;但只能输出一个文件的比较结果。我们需要修改代码&#xff0c;以便比较所有文件并打印所有结果。 import difflib import fnmatch import osfilelist[] f op…

Lobechat 的基本使用流程

一、安装 下载lobechart的页面代码 $ git clone https://github.com/lobehub/lobe-chat.git $ cd lobe-chat $ pnpm install $ pnpm run dev注意&#xff1a;node环境要18以上 二、使用本地模型 1.安装ollama 2.通过ollama 下载本地模型 llama2&#xff08;选择合适的本地模型…

[阅读笔记16][Orca-2]Teaching Small Language Models How to Reason

接下来是Orca-2&#xff0c;这篇是微软在23年11月发表的论文&#xff0c;在Orca-1的基础上又进行了一些改进。 作者希望教会Orca-2各种推理策略&#xff0c;例如逐步思考、回忆然后回答、先回忆再推理再回答、直接生成回答等等策略。并且Orca-2应该能针对不同任务应该使用最合适…

【leetcode面试经典150题】64. 删除排序链表中的重复元素 II(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

袁庭新ES系列15节|Elasticsearch客户端基础操作

前言 上一章节我们介绍了搭建Elasticsearch集群相关的知识。那么又该如何来操作Elasticsearch集群呢&#xff1f;在ES官网中提供了各种语言的客户端&#xff0c;我们在项目开发过程中有多种Elasticsearch版本和连接客户端可以选择&#xff0c;那么他们有什么区别&#xff1f;这…

Golang内存、指针逃逸、垃圾回收机制概览

最近看到了一篇文章是关于go的内存、指针逃逸和垃圾回收机制的&#xff0c;发现自己并未很细致的了解过这方面的内容&#xff0c;于是在翻阅各种文章的情况下&#xff0c;写出了这篇总结&#xff0c;参考文章放在文末&#xff0c;可自取 内存 Go 语言使用一个自带的垃圾收集器…

修复vite中使用react提示Fast refresh only works when a file only exports components.

前言 我通过 vite 构建了一个 react 应用并使用 react.lazy 来懒加载组件&#xff0c;但是在使用过程中 一直提示 Fast refresh only works when a file only exports components. Move your component(s) to a separate file.eslint(react-refresh/only-export-components)。…

PSA Group EDI 需求分析

PSA集团&#xff08;以下简称PSA&#xff09;中文名为标致雪铁龙集团&#xff0c;是一家法国私营汽车制造公司&#xff0c;致力于为全球消费者提供独具特色的汽车体验和自由愉悦的出行方案&#xff0c;旗下拥有标致、雪铁龙、DS、欧宝、沃克斯豪尔五大汽车品牌。 汽车制造企业对…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章&#xff0c;主要是给非线性动力学&#xff0c;对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说&#xff0c;这与混沌系统的预测有关&#xff1b;传统的机器学习的模式识别虽然也会谈论预测结果&#xff0c;但他们一般不会涉及连续的预测。这里我们考虑的是&…

Rokid AR Lite空间计算套装发布,中国空间计算踏上差异化领先之路

动动手指、动动眼睛就可以“操控一切”&#xff0c;这种颇具科幻感、未来感的交互方式&#xff0c;令许多人感叹“未来已来”。而这令人震撼的变革背后&#xff0c;正是空间计算技术的迅猛崛起与广泛应用&#xff0c;使得这种曾经只存在于想象中的交互方式&#xff0c;如今正逐…