IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 2021-08-30 Vue-Axios案例 组件化 VUE路由介绍 async-await关键字 -> 正文阅读

[JavaScript知识库]2021-08-30 Vue-Axios案例 组件化 VUE路由介绍 async-await关键字

?需求说明

  1. ??? 当展现页面时,用户发起请求 ,获取所有的user数据.
  2. ??? 通过Vue.js 要求在页面中展现数据, 以表格的形式展现.
  3. ??? 为每行数据添加 修改/删除的按钮
  4. ??? 在一个新的DIV中 编辑3个文本框 name/age/sex 通过提交按钮实现新增.
  5. ??? 如果用户点击修改按钮,则在全新的DIV中 回显数据.
  6. ??? 用户修改完成数据之后,通过提交按钮 实现数据的修改.
  7. ??? 当用户点击删除按钮时,要求实现数据的删除操作.

实现效果(后端代码省略)

?定义axios请求的前缀
?axios.defaults.baseURL = "http://localhost:8080/axios"

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>案例联系</title>
		<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script src="../js/axios.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body style="background-color: aquamarine;">
		<div id="app">
			<h1 align="center">用户新增</h1>
			<div align="center">				
				姓名<input type="text" v-model="addUser.name" name="name" id="" value="" />
				年龄<input type="text" v-model="addUser.age" name="age" id="" value="" />
				性别<input type="text" v-model="addUser.sex" name="sex" id="" value="" />
				<button type="button" @click="addUserBtn">提交</button>
				</form>
			</div>
			<h1 align="center"><a name="add" >用户修改</a></h1>
			<div align="center">
				编号<input type="text" v-model="newUser.id" name="" id="" value=""  disabled=""/>
				姓名<input type="text" v-model="newUser.name" name="" id="" value="" />
				<br />
				年龄<input type="text" v-model="newUser.age" name="" id="" value="" />
				性别<input type="text" v-model="newUser.sex" name="" id="" value="" />
				<button @click="updateUserBtn2">修改</button>
			</div>
			
			<div id="">				
			
				<table border="1px" width="80%" cellspacing="0px" cellpadding="2px" align="center">
					<tr align="center"><th colspan="5">主页</th></tr>
					<tr align="center">
					<td>编号</td>
					<td>姓名</td>
					<td>年龄</td>
					<td>性别</td>
					<td>操作</td>
					</tr>
					<tr align="center" v-for="user in userList">
					<td v-text="user.id"></td>
					<td v-text="user.name"></td>
					<td v-text="user.age"></td>
					<td v-text="user.sex"></td>
					<td>
					<button @click="updateUserBtn(user)"><a href="#add"  style="text-decoration: none;color: black;">修改</a></button>
					<button @click="deleteUserBtn(user)">删除</button></td>
					</tr>
				</table>
				
			</div>
		</div>
		<!-- mounted:function(){} -->
		<script type="text/javascript">
			axios.defaults.baseURL="http://localhost:8080/axios"
			new Vue({
				el:"#app",
				data:{
					userList:"",
					addUser:{
						name:'',
						age:'',
						sex:''
					},
					newUser:{
						id:'',
						name:'',
						age:'',
						sex:''
					}
				},
				methods:{
					getUserList(){
						axios.get("/getAll").then(promise=>
						{
							this.userList=promise.data
						})
					},
					addUserBtn(){
						axios.post("/saveUser",this.addUser).then(promise=>
						{
							this.getUserList()
							this.addUser={}
							alert("新增成功!")
						})
					},
					deleteUserBtn(user){
						axios.delete("/deleteById?id="+user.id).then(promise=>
						{
							this.getUserList()
							alert("删除成功!")
						})
					},
					updateUserBtn(user){
						this.newUser=user
					},
					updateUserBtn2(){
						axios.put("/putUser",this.newUser).then(promise=>
						{
						this.getUserList()
							this.newUser={}
						})
					}
					
				},
				created(){
					this.getUserList()
				}
								
			})
			
		</script>
	</body>
</html>

axios简化操作 async-await关键字为了简化then()的一种全新的语法

?? ? <script type="text/javascript">
?? ??? ? axios.defaults.baseURL="http://localhost:8080/axios"
?? ? ?? ??? ?async function findAll(){
?? ??? ??? ??? ?let {data: result} = await axios.get("/getAll")
?? ??? ??? ??? ?console.log(result)
?? ??? ??? ?}
?? ??? ??? ? findAll()

?</script>

说明: 传统的页面开发,会将大量的HTML/CSS/JS进行引入,但是引入之后结构混乱 不便于管理. 开发维护时 成本较高.
组件化思想:
在VUE中 可以将一个组件,看作是一个页面. 在其中可以引入独立的样式/JS/HTML 进行单独的管理.
组件可以进行复用.
关键字: 组件–页面 (html/css/js)

核心知识点: 组件化的思想体现了"分治思想"
补充知识: 为了保证组件化 相互之间互不干扰,则应该在组件内部 单独定义html/js/css.
全局组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<!-- 1.在vue中使用标签时默认都是小写字母.如果需要
					引入驼峰规则.则使用-线代替.
					2.使用组件通过标签引用 -->
			<add-num-com></add-cum-com>
			<add-num-com></add-cum-com>
			<add-num-com></add-cum-com>
		</div>
		//模板标签必须定义在vue渲染div外边
		<template id="numTem">
			<div id="">
				<h1>全局组件</h1>
				{{num}}
			</div>
		</template>
		<script type="text/javascript">
			//组件名称
			Vue.component("addNumCom",{
				data(){
					return{
						num:100
					}
				},
				template:"#numTem"
				
			})
			new Vue({
				el:"#app"
			})
		</script>
	</body>
</html>

局部组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<msg-com></msg-com>		
		</div>
		
		<template id="msgTem">
			<div >
				<h3>局部组件</h3>
				{{msg}}
			</div>
		</template>
		<script type="text/javascript">
			let msgCom={
				data(){
				return {
					msg: "我是局部组件"
			        }
				},
				template:"#msgTem"
			}
			
			const app=new Vue({
				el:"#app",
				components:{
					msgCom:msgCom
					
				}
			})
	</script>
	</body>
</html>

2.4 关于组件知识点

??? 为什么使用组件?
??? 答:
??? 1.原来用户编辑页面时,需要引入/维护大量的JS/CSS等.如果数量很多,则导致代码结构混乱.所以需要引入组件化思想.
??? 2.前端框架为了更好的解耦,采用了"分治"思想的构建代码.前端向后端代码结构看齐.(微服务框架)
??? 3.组件采用树形结构, 可以将功能小型化.单独维护.
??? 4.组件是一个独立的个体,内部包含HTML/CSS/JS
??? 5.使用组件看做就是一个页面

??? 如何理解template属性?
??? 答:
??? 1.template标签是组件中定义html标记的模板.
??? 2.template标签必须有根标签div
??? 3.template标签最好定义在body标签内部,写法方便.

??? 关于组件使用有什么注意事项?
??? 答:
??? 1. 组件的使用必须在VUE对象渲染的区域中使用.
??? 2. 组件有全局的/有局部的.注意作用域.
??? 3. 在html标签中使用组件时,注意大小写问题.如果是驼峰规则,则使用 "-"连接.
??? 4. 组件必须先定义再使用.

路由说明

说明: 用户发起一个请求,在互联网中经过多个站点的跳转.最终获取服务器端的数据. 把互联网中网络的链路称之为路由. (网络用语)
VUE中的路由: 根据用户的请求URL地址,展现特定的组件(页面)信息. (控制用户程序跳转过程)

  1. 引入JS类库
  2. 指定路由跳转链接
  3. 指定路由填充位
  4. 封装路由对象
  5. vue对象绑定路由
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<h1>江哥动物园</h1>
			<router-link to="/tiger">老虎</router-link>
			<router-link to="/lion">狮子</router-link>
			<router-view></router-view>
		</div>
		<template id="tigerTem">			
			<div >
				<h1>实现老虎自由</h1>
				<router-link to="/tiger/one">老虎正房</router-link>
				<router-view></router-view>
				<router-link to="/tiger/two">老虎小妾</router-link>
				
			</div>
		</template>
		<template id="lionTem">
			<div >
				<h1>实现狮子自由</h1>
			</div>
		</template>
		<template id="ToneTem">
			<div >
				<h1>实现正房自由</h1>
				<h1>实现正房自由</h1>
			</div>
		</template>
		<template id="TtwoTem">
			<div >
				<h1>实现小妾自由</h1>
				
			</div>
		</template>
		
		<script src="../../js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/vue-router.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			let tigerCom={
				template:"#tigerTem"
			}
			let lionCom={
				template:"#lionTem"
			}
			let tigeroneCom={
				template:"#ToneTem"
			}
			let tigertwoCom={
				template:"#TtwoTem"
			}
			/* 封装路由对象 */
			let router=new VueRouter({	
				/* 父子嵌套 应该使用children属性
				 */
				routes:[{path:"/tiger",component:tigerCom,
				children:[{path:"/tiger/one",component:tigeroneCom},
				{path:"/tiger/two",component:tigertwoCom}]},
                {path:"/lion",component:lionCom}]
				
			})
			
			const app=new Vue({
				el:"#app",
				router
				
			})
		</script>
	</body>
</html>

转发说明

说明: 用户请求服务器时,由服务器将请求转给另一台服务器的过程.叫做转发

重定向说明

说明: 用户请求服务器时,服务器由于特殊原因告知用户应该访问服务器B,之后用户再次发起请求访问服务器B. 这个过程称之为重定向

在这里插入图片描述

?在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:22:02  更:2021-08-31 15:22:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:47:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码