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. 这个过程称之为重定向

在这里插入图片描述

 在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值