当前位置: 首页 > news >正文

AI+JavaWeb Vue Ajax

Vue

Vue是一款用于构建用户界面的渐进式JavaScript框架。官方网站
构建用户界面:基于数据渲染出用户看到的界面。
渐进式:可以根据项目需要,选择和改造Vue中的模块。
image

Vue快速入门

image
引入Vue,参考快速开始

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue快速入门</title>
</head>
<body><!--3.定义元素div,交给Vue控制--><div id="app"><h1>{{message}}</h1> <!--5.此处用插值表达式进行渲染--><h2>{{count}}</h2></div><!--1.引入Vue模块--><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'//2.创建Vue的应用实例createApp({data(){ //4.准备数据return{message:"Hello,Vue!",count: 100}}}).mount('#app') //表示当前Vue需要接管的区域</script>
</body>
</html>

安装插件

给vscode安装Vetur和Vue 3 snippet插件
给浏览器安装扩展程序Vue.js devtools并设置允许访问文件 URL

常用指令

指令:HTML标签上带有v-前缀的特殊属性,不同的指令具有不同的含义,可以实现不同的功能。
例如:

<p v-xxx="...">...</p>

image

v-for 列表渲染,遍历容器的元素或对象的属性

image
注意:遍历的数组,必须定义在data中;要想让哪个标签循环展示多次,就在哪个标签上使用v-for指令

示例:员工列表数据渲染展示

<!-- 表格主体内容 -->
<tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男':'女'}}</td><td><img class="avatar" src={{e.image}} alt={{e.name}}></td> <!--插值表达式不能出现在标签内部,应使用v-bind--><td>{{e.job}}</td><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody>

v-bind 动态为HTML标签绑定属性值,如设置href,src,style样式等

标签内部不能使用插值表达式,得使用v-bind指令动态的为标签的属性绑定值。且绑定的数据,必须在data中定义。
语法:v-bind:属性名="属性值"
简化形式::属性名="属性值"

<td><img class="avatar" v-bind:src="e.image" alt="e.name"></td>

v-if和v-show控制元素的显示与隐藏

v-if

原理:基于条件判断,来控制创建或移除元素节点(条件渲染)
语法:v-if="表达式",表达式值为true则显示,否则隐藏
场景:不频繁切换的场景

v-show

原理:基于CSS样式display来控制显示与隐藏
语法:v-show="表达式",表达式值为true则显示,否则隐藏
创建:频繁切换显示/隐藏的场景

案例:员工列表数据渲染展示中职位渲染

<td><!-- <span v-if="e.job == 1">班主任</span><span v-else-if="e.job == 2">讲师</span><span v-else-if="e.job == 3">学工主管</span><span v-else-if="e.job == 4">教研主管</span><span v-else-if="e.job == 5">咨询师</span><span v-else>咨询师</span> --><span v-show="e.job == 1">班主任</span><span v-show="e.job == 2">讲师</span><span v-show="e.job == 3">学工主管</span><span v-show="e.job == 4">教研主管</span><span v-show="e.job == 5">咨询师</span>
</td>

v-model 双向数据绑定

作用:在表单元素上使用,双向数据绑定。可以方便的获取或设置表单项数据
语法:v-model="变量名"
image
v-model中绑定的变量,必须在data中定义。

示例:搜索栏中搜索表单数据的绑定

{{searchForm}}
<!-- 搜索表单区域 -->
<form class="search-form" action="/search" method="post"><label for="name">姓名:</label><input type="text" id="name" name="name" placeholder="请输入姓名" v-model="searchForm.name"><label for="gender">性别:</label><select id="gender" name="gender" v-model="searchForm.gender"><option value=""></option><option value="1">男</option><option value="2">女</option></select><label for="position">职位:</label><select id="position" name="position" v-model="searchForm.position"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="submit">查询</button><button type="reset">清空</button>
</form>

v-on 为html标签绑定事件(添加事件监听)

语法:v-on:事件名="方法名",简写为@事件名="..."
注意:方法名需要在createApp中和data并列声明,方法中使用this.变量名访问data中的变量

示例:实现搜索栏旁边的查询和清空按钮的功能

<form class="search-form" action="/search" method="post"><label for="name">姓名:</label><input type="text" id="name" name="name" placeholder="请输入姓名" v-model="searchForm.name"><label for="gender">性别:</label><select id="gender" name="gender" v-model="searchForm.gender"><option value=""></option><option value="1">男</option><option value="2">女</option></select><label for="position">职位:</label><select id="position" name="position" v-model="searchForm.position"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button></form><script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({data(){return{searchForm:{name: '',gender:'',job:'',},empList: [...]},methods: {search(){console.log(this.searchForm);},clear(){this.searchForm = {name: '',gender:'',job:'',}}},...
}).mount('#container')
</script>

生命周期 钩子方法

注意:重点掌握mounted周期,一般用于Vue加载完成后请求页面数据,如每次打开页面后自动刷新员工列表
image
image

createApp({data(){return{searchForm:{name: '',gender:'',job:'',},empList: []}},methods: {async search(){console.log(this.searchForm);let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);this.empList = result.data.data;console.log(result.data);},clear(){this.searchForm = {name: '',gender:'',job:'',}this.search()}},mounted() {console.log('Vue挂载完成');this.search();},}).mount('#container')

Ajax:Asynchronous JavaScript And XML

Ajax:Asynchronous JavaScript And XML,异步的JavaScript和XML(Extensible Markup Language,可扩展标记语言,本质是一种数据格式,可以用来存储复杂的数据结构)。

作用

  1. 数据交换:通过Ajax可以给服务器发送请求,并获取服务器返回的数据
  2. 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、对输入字段(用户名、密码等)是否可用的校验等等。
    image

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

官网:https://axios-http.com/zh/
步骤:

  1. 引入Axios的js文件,参考官网
  2. 使用Axios发送请求,并获取响应结果
    image

示例代码

<body><input type="button" value="获取数据GET" id="btnGet"><input type="button" value="操作数据POST" id="btnPost"><script src="js/axios.js"></script><!--引入Axios的js文件--><script>//发送GET请求document.querySelector('#btnGet').addEventListener('click', () => {//axios发起异步请求//方式一:简洁,推荐axios.get('https://mock.apifox.cn/m1/3083103-0-default/emps/list').then((result)=>{console.log(result.data);})//方式二:完整写法axios({url: 'https://mock.apifox.cn/m1/3083103-0-default/emps/list',method: 'GET'}).then((result) => { //成功回调函数console.log(result.data);}).catch((err) => { //失败回调函数console.log(err);})})//发送POST请求document.querySelector('#btnPost').addEventListener('click', () => {//axios发起异步请求//方式一:简洁,推荐axios.post('https://mock.apifox.cn/m1/3083103-0-default/emps/update','id=1').then((result)=>{console.log(result.data);})//方式二:完整写法axios({url: 'https://mock.apifox.cn/m1/3083103-0-default/emps/update',method: 'POST',data: 'id=1' //POST请求方式 , 请求体}).then((result) => { //成功回调函数console.log(result.data);}).catch((err) => { //失败回调函数console.log(err);})})</script>
</body>

async & await 异步操作变同步

可以通过async、await让异步变为同步操作,async用于声明一个异步方法,await用于等待异步任务的执行。

async search(){console.log(this.searchForm);let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);this.empList = result.data.data;console.log(result.data);}

Vue+Ajax完整案例

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Tlias智能学习辅助系统</title><style>/* 导航栏样式 */.navbar {background-color: #b5b3b3; /* 灰色背景 */display: flex; /* flex弹性布局 */justify-content: space-between; /* 左右对齐 */padding: 10px; /* 内边距 */align-items: center; /* 垂直居中 */}.navbar h1 {margin: 0; /* 移除默认的上下外边距 */font-weight: bold; /* 加粗 */color: white;/* 设置字体为楷体 */font-family: "楷体";}.navbar a {color: white; /* 链接颜色为白色 */text-decoration: none; /* 移除下划线 */}/* 搜索表单样式 */.search-form {display: flex;flex-wrap: nowrap;align-items: center;gap: 10px; /* 控件之间的间距 */margin: 20px 0;}.search-form input[type="text"], .search-form select {padding: 5px; /* 输入框内边距 */width: 260px; /* 宽度 */}.search-form button {padding: 5px 15px; /* 按钮内边距 */}/* 表格样式 */table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #ddd; /* 边框 */padding: 8px; /* 单元格内边距 */text-align: center; /* 左对齐 */}th {background-color: #f2f2f2;font-weight: bold;}.avatar {width: 30px;height: 30px;}/* 页脚样式 */.footer {background-color: #b5b3b3; /* 灰色背景 */color: white; /* 白色文字 */text-align: center; /* 居中文本 */padding: 10px 0; /* 上下内边距 */margin-top: 30px;}#container {width: 80%; /* 宽度为80% */margin: 0 auto; /* 水平居中 */}</style>
</head>
<body><div id="container"><!-- 顶部导航栏 --><div class="navbar"><h1>Tlias智能学习辅助系统</h1><a href="#">退出登录</a></div>{{searchForm}}<!-- 搜索表单区域 --><form class="search-form" action="/search" method="post"><label for="name">姓名:</label><input type="text" id="name" name="name" placeholder="请输入姓名" v-model="searchForm.name"><label for="gender">性别:</label><select id="gender" name="gender" v-model="searchForm.gender"><option value=""></option><option value="1">男</option><option value="2">女</option></select><label for="job">职位:</label><select id="job" name="job" v-model="searchForm.job"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button></form><!-- 表格展示区 --><table><!-- 表头 --><thead><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><!-- 表格主体内容 --><tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男':'女'}}</td><td><img class="avatar" v-bind:src="e.image" alt="e.name"></td> <!--插值表达式不能出现在标签内部--><td><!-- <span v-if="e.job == 1">班主任</span><span v-else-if="e.job == 2">讲师</span><span v-else-if="e.job == 3">学工主管</span><span v-else-if="e.job == 4">教研主管</span><span v-else-if="e.job == 5">咨询师</span><span v-else>咨询师</span> --><span v-show="e.job == 1">班主任</span><span v-show="e.job == 2">讲师</span><span v-show="e.job == 3">学工主管</span><span v-show="e.job == 4">教研主管</span><span v-show="e.job == 5">咨询师</span></td><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody></table><!-- 页脚版权区域 --><footer class="footer"><p>江苏传智播客教育科技股份有限公司</p><p>版权所有 Copyright 2006-2024 All Rights Reserved</p></footer></div><script src="js/axios.js"></script><!--引入Axios的js文件--><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({data(){return{searchForm:{name: '',gender:'',job:'',},empList: []}},methods: {async search(){console.log(this.searchForm);let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);this.empList = result.data.data;console.log(result.data);},clear(){this.searchForm = {name: '',gender:'',job:'',}this.search()}},mounted() {console.log('Vue挂载完成');this.search();},}).mount('#container')//通过JS为上述的表格中数据行添加事件监听, 实现鼠标进入后, 背景色#f2e2e2; 鼠标离开后, 背景色需要设置为#fff; (JS新版本的语法)// 1. 获取所有的tr标签let trs = document.querySelectorAll('tr');// 2. 为每一个tr标签添加事件监听for(let i = 0; i < trs.length; i++){trs[i].addEventListener('mouseenter', function(){ // mouseenter 鼠标进入trs[i].style.backgroundColor = '#f2e2e2';});trs[i].addEventListener('mouseleave', function(){ // mouseleave 鼠标离开trs[i].style.backgroundColor = '#fff';})}</script>
</body>
</html>
http://www.jsqmd.com/news/444455/

相关文章:

  • 详细介绍:数据结构之查找的方法
  • 2026年大连殡葬服务标杆机构最新推荐:大连众安诚信殡葬礼仪有限公司,一站式殡仪服务新标杆 - 海棠依旧大
  • 聚合支付系统设计方案
  • osi七层模型学习笔记
  • 2026年3月大连殡葬服务公司选择指南:殡葬一条龙、殡仪服务、殡葬用品、灵棚搭建、殡仪车出租相关公司 - 海棠依旧大
  • 保姆级VSCode入门指南,Python党直接抄作业
  • 二叉树的直径-leetcode
  • React Fibber架构设计理解
  • 2026年国内信号屏蔽仪品牌排名推荐,助您选择更具品质保障的产品 - 睿易优选
  • 嘎嘎降AI vs 学术猹 vs PaperYY降AI:同一篇论文三个结果 - 还在做实验的师兄
  • 博士论文降AI用什么工具?高要求场景下只推荐这2款 - 还在做实验的师兄
  • 论文降AI后查重率飙升怎么办?一招搞定两全其美 - 还在做实验的师兄
  • 【MySQL 数据库】MySQL 数据库核心概念详解:库、表、字段、主键与关系型模型一文读懂 - 指南
  • AI 模型服务化实战:FastAPI + vLLM 高性能部署指南
  • ARC092F - Two Faced Edges - Link
  • Logstash
  • 均值不等式初步介绍
  • 最小二乘问题详解13:对极几何中本质矩阵求解
  • 2026年西宁漏水检测维修标杆机构最新推荐:消防管道漏水检测、卫生间漏水检测、厨房漏水检测、暗管漏水检测、地埋管线查漏水、厂房漏水检测、西宁斌瑶精准定位破解漏水难题 - 海棠依旧大
  • 2026年8款主流降AI工具横评:亲测避坑,谁才是论文降重刚需首选? - 晨晨_分享AI
  • 无人机战场侦察 6 类军事目标检测数据集(10,000张图片已划分、已标注)| AI训练适用于目标检测任务
  • getit
  • 2026年3月西宁漏水检测维修机构选择指南:漏水检测、查漏水、防水维修、厨房漏水、厂房漏水、地埋管线、漏水点定位机构 - 海棠依旧大
  • 2026年8款主流降AI工具横评:亲测避坑,谁才是论文降重刚需首选? - 老米_专讲AIGC率
  • 著名的独立开发者 Clara 为什么还是选择了成立团队,以及一些经验
  • 省选 2026 知识点梳理
  • 论文AI率降低实用指南:热门工具横评与实战方案 - 仙仙学姐测评
  • Energy Distance:度量两个多元分布差异的统计方法
  • 论文AI率过高怎么办?实用降AI工具横评与高效应对指南 - 晨晨_分享AI
  • 论文AI率怎么降?2026年实用工具与方法全指南 - 仙仙学姐测评