Vue框架入门(一)---开发简易计算器

涉及知识:

  1. HTML、CSS、JavaScript
  2. Vue(v-for、v-model、v-on、v-clock)

Gitee仓库 :https://gitee.com/vgtime123/Calculator

Gitee Pages:http://vgtime123.gitee.io/calculator


目标

在这里插入图片描述


代码

sty.css:

* {
	margin: 0;
	padding: 0;
	box-sizing: border-box; /*引入盒子模型*/
}
body {
	background-color: antiquewhite;
}

[v-cloak]{
	display: none; /*解决渲染时的闪动问题*/
}

.calcu {
	width: 600px;
	height: 470px;
	margin: 100px auto;
    box-shadow:9px 9px 15px #c8c8c8 ; /*阴影浮动效果*/
	
}
.calcu-play {
	width: 100%;
	height: 120px;
	margin: 0 auto;
	font-size: 50px;
	background-color: pink;
	outline: none;
}
.calcu-key {
	height: 350px;
	width: 100%;
	text-align: center;
	
}
.calcu-key button {
	width: 100%;
	height: 100%;
	font-size: 30px;
	outline: none;
}
.calcu-key td {
	width: 50px;
}

index.html:

<!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="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	<link rel="stylesheet" type="text/css" href="css/sty.css"/>
</head>
<body>
	<!--计算器-->
	<div class="calcu" id="calculator" v-cloak>
		<input type="text" class="calcu-play" v-model="exp" @keydown="getkey">
			
		</input>
		<table class="calcu-key" border="0" cellspacing="0" cellpadding="0" >
			<tr v-for="item in arr" ><td v-for="it in item" ><button type="button" @click="getbtn($event)" >{{it}}</button> </td> </tr>
	<!--	
			<tr><td><button type="button" >(</button></td><td><button type="button" >)</button></td><td><button type="button"  >%</button></td><td><button type="button" >C</button></td></tr>
			<tr><td><button type="button" >7</button></td><td><button type="button" >8</button></td><td><button type="button"  >9</button></td><td><button type="button" >/</button></td></tr>
			<tr><td><button type="button" >4</button></td><td><button type="button" >5</button></td><td><button type="button"  >6</button></td><td><button type="button" >*</button></td></tr>
			<tr><td><button type="button" >1</button></td><td><button type="button" >2</button></td><td><button type="button"  >3</button></td><td><button type="button" >-</button></td></tr>
			<tr><td><button type="button" >0</button></td><td><button type="button" >.</button></td><td><button type="button"  >=</button></td><td><button type="button" >+</button></td></tr>
	-->	
		</table>
	</div>
	<!--引入脚本-->
	<script type="text/javascript" src="js/calcu.js"></script>
</body>
</html>

calcu.js:

var calculator = new Vue({
			el:"#calculator",
			data:{
				exp: "",
				arr:[
					["(", ")", "%", "C"],
					["7", "8", "9", "/"],
					["4", "5", "6", "*"],
					["1", "2", "3", "-"],
					["0", ".", "=", "+"],
				],
			},
			methods:{
				//键盘按下的触发的方法
				getkey:function(event) {
					
					switch(event.keyCode) {
						case 67: //C
							this.exp = '';
							event.preventDefault(); //阻止C字母输入到框中
							break;
						case 13: //enter
								var result = ''; 
								try{
									eval(this.exp+"");
								}catch(e){				
									result = "ERROR";
								}finally{
									this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
								}break;
					}
				},
				//鼠标按下触发的方法
				getbtn:function(e) {
					switch(e.target.innerText) {
						case "C": 
							this.exp = '';break;
						case "=": 
								var result ;
								try{
									eval(this.exp+"");
								}catch(e){				
									result = "ERROR";
								}finally{
									this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
								}break;
						default: 
								this.exp += e.target.innerText;
								break;
								
					}
				},
			}
		})

搭建骨架

  1. 计划制作五排四列的按键,用table表格搭建
  2. td标签中内嵌button按钮,显示框采用input标签的text样式
  3. button中嵌入符号
<div class="calcu" id="calculator" v-cloak>
		<input type="text" class="calcu-play" >	
		
		<table class="calcu-key" border="0" cellspacing="0" cellpadding="0"  >
			<tr><td><button type="button" >(</button></td><td><button type="button" >)</button></td><td><button type="button"  >%</button></td><td><button type="button" >C</button></td></tr>
			<tr><td><button type="button" >7</button></td><td><button type="button" >8</button></td><td><button type="button"  >9</button></td><td><button type="button" >/</button></td></tr>
			<tr><td><button type="button" >4</button></td><td><button type="button" >5</button></td><td><button type="button"  >6</button></td><td><button type="button" >*</button></td></tr>
			<tr><td><button type="button" >1</button></td><td><button type="button" >2</button></td><td><button type="button"  >3</button></td><td><button type="button" >-</button></td></tr>
			<tr><td><button type="button" >0</button></td><td><button type="button" >.</button></td><td><button type="button"  >=</button></td><td><button type="button" >+</button></td></tr>
	
		</table>
	</div>

预期结果:
在这里插入图片描述


添加外观

* {
	margin: 0;
	padding: 0;
	box-sizing: border-box; /*引入盒子模型*/
}
body {
	background-color: antiquewhite; /* 背景颜色选择米黄色*/
}

.calcu {
	width: 600px;
	height: 470px;
	margin: 100px auto;
    box-shadow:9px 9px 15px #c8c8c8 ; /*阴影浮动效果*/
	
}
.calcu-play {			 /*input显示区*/
	width: 100%;
	height: 120px;
	margin: 0 auto;
	font-size: 50px;
	background-color: pink; /*显示区选择粉色*/
	outline: none;
}
.calcu-key {
	height: 350px;
	width: 100%;
	text-align: center; /*
	
}
.calcu-key button { 
	width: 100%;
	height: 100%;
	font-size: 30px;
	outline: none;
}
.calcu-key td {
	width: 50px;
}

在这里插入图片描述


改用Vue框架

1.引入Vue框架

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

2.声明Vue实例,采用二维数组的方式通过两层v-for渲染到页面中

var calculator = new Vue({
			el:"#calculator",
			data:{
				arr:[
					["(", ")", "%", "C"],
					["7", "8", "9", "/"],
					["4", "5", "6", "*"],
					["1", "2", "3", "-"],
					["0", ".", "=", "+"],
				]
			}
	})

3 .鼠标点击按钮触发getbtn方法

 
			<tr v-for="item in arr" ><td v-for="it in item" ><button type="button" @click="getbtn($event)" >{{it}}</button> </td> </tr>
	<!--	
			<tr><td><button type="button" >(</button></td><td><button type="button" >)</button></td><td><button type="button"  >%</button></td><td><button type="button" >C</button></td></tr>
			<tr><td><button type="button" >7</button></td><td><button type="button" >8</button></td><td><button type="button"  >9</button></td><td><button type="button" >/</button></td></tr>
			<tr><td><button type="button" >4</button></td><td><button type="button" >5</button></td><td><button type="button"  >6</button></td><td><button type="button" >*</button></td></tr>
			<tr><td><button type="button" >1</button></td><td><button type="button" >2</button></td><td><button type="button"  >3</button></td><td><button type="button" >-</button></td></tr>
			<tr><td><button type="button" >0</button></td><td><button type="button" >.</button></td><td><button type="button"  >=</button></td><td><button type="button" >+</button></td></tr>
	-->	

4.优化input,使之通过键盘按下触发getkey也能输入信息计算

<input type="text" class="calcu-play"  v-model="exp" @keydown="getkey">	

5.js

var calculator = new Vue({
			el:"#calculator",
			data:{
				exp: "", //显示框表达式
				arr:[
					["(", ")", "%", "C"],
					["7", "8", "9", "/"],
					["4", "5", "6", "*"],
					["1", "2", "3", "-"],
					["0", ".", "=", "+"],
				],
			},
			methods:{
				//键盘按下的触发的方法
				getkey:function(event) {
					
					switch(event.keyCode) {
						case 67: //C
							this.exp = '';
							event.preventDefault(); //阻止C字母输入到框中
							break;
						case 13: //enter
								var result = ''; 
								try{
									eval(this.exp+""); //为简化计算过程,采用eval函数让系统计算过程,如若表达式错误,则抛出ERROR
								}catch(e){				
									result = "ERROR";
								}finally{
									this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
								}break;
					}
				},
				//鼠标按下触发的方法
				getbtn:function(e) {
					switch(e.target.innerText) {
						case "C": 
							this.exp = '';break;
						case "=": 
								var result ;
								try{
									eval(this.exp+""); //为简化计算过程,采用eval函数让系统计算过程,如若表达式错误,则抛出ERROR
								}catch(e){				
									result = "ERROR";
								}finally{
									this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
								}break;
						default: 
								this.exp += e.target.innerText;
								break;
								
					}
				},
			}
		})

完整代码

<!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="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 	
	<link rel="stylesheet" type="text/css" href="css/sty.css"/>
 -->	
		<style type="text/css">
		* {
			margin: 0;
			padding: 0;
			box-sizing: border-box;
		}
		body {
			background-color: antiquewhite;
		}
		
		[v-cloak]{  /*解决渲染时的闪动问题*/
			display: none;
		}
		
		.calcu {
			width: 600px;
			height: 470px;
			margin: 100px auto;
		    box-shadow:9px 9px 15px #c8c8c8 ;
			
		}
		.calcu-play {
			width: 100%;
			height: 120px;
			margin: 0 auto;
			font-size: 50px;
			background-color: pink;
			outline: none;
		}
		.calcu-key {
			height: 350px;
			width: 100%;
			text-align: center;
			align-items: center;
		}
		.calcu-key button {
			width: 100%;
			height: 100%;
			font-size: 30px;
			outline: none;
		}
		.calcu-key td {
			width: 50px;
		}
	</style>
</head>
<body>
	<!--计算器-->
	<div class="calcu" id="calculator" v-cloak >
			<input type="text" class="calcu-play"  v-model="exp" @keydown="getkey">	
			
			
			<table class="calcu-key" border="0" cellspacing="0" cellpadding="0"  >
			<tr v-for="item in arr" >
				<td v-for="it in item" >
					<button type="button" @click="getbtn($event)" >{{it}}</button>
				</td> 
			</tr>
				
			</table>
		</div>
		<script type="text/javascript">
			var calculator = new Vue({
						el:"#calculator",
						data:{
							exp: "",
							arr:[
								["(", ")", "%", "C"],
								["7", "8", "9", "/"],
								["4", "5", "6", "*"],
								["1", "2", "3", "-"],
								["0", ".", "=", "+"],
							],
						},
						methods:{
							//键盘按下的触发的方法
							getkey:function(event) {
								
								switch(event.keyCode) {
									case 67: //C
										this.exp = '';
										event.preventDefault(); //阻止C字母输入到框中
										break;
									case 13: //enter
											var result = ''; 
											try{
												eval(this.exp+"");
											}catch(e){				
												result = "ERROR";
											}finally{
												this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
											}break;
								}
							},
							//鼠标按下触发的方法
							getbtn:function(e) {
								switch(e.target.innerText) {
									case "C": 
										this.exp = '';break;
									case "=": 
											var result ;
											try{
												eval(this.exp+"");
											}catch(e){				
												result = "ERROR";
											}finally{
												this.exp =  result?result:(this.exp + " = "+ eval(this.exp+""));
											}break;
									default: 
											this.exp += e.target.innerText;
											break;
											
								}
							},
						}
					})
		</script>
<!-- 	
	<script type="text/javascript" src="js/calcu.js"></script>
 -->	
</body>
</html>

使用测试

使用鼠标计算得出结果:

在这里插入图片描述

输入错误会弹出ERROR

在这里插入图片描述

使用键盘计算,有效数字0~9,按下回车计算,按下c键为重置

在这里插入图片描述

如若中间输入有误可以通过光标修改

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue-Admin-Template 是一个基于 Vue.js 和 Element UI 的后台管理系统模板,主要用于开发企业级的后台管理系统。以下是 Vue-Admin-Template 的基本开发视图: 1. 组件结构:Vue-Admin-Template 的组件结构非常清晰,主要包括布局组件、业务组件、通用组件和工具组件。其中,布局组件包括头部、侧边栏、主体等组件;业务组件包括各种业务模块的组件,如用户管理、订单管理等;通用组件包括表单、表格、图表等常用组件;工具组件包括各种工具类组件,如菜单生成器、权限管理器等。 2. 组件交互:Vue-Admin-Template 的组件之间通过 props 和事件进行交互。父组件通过 props 把数据传递给子组件,子组件通过事件向父组件发送消息。此外,Vue-Admin-Template 也通过 Vuex 实现组件之间的数据共享。 3. 路由配置:Vue-Admin-Template 的路由配置非常灵活,可以通过配置文件或接口动态生成路由。路由配置文件主要包括路由路径、组件名称、路由名称、路由元信息等。 4. 数据交互:Vue-Admin-Template 的数据交互采用了 Axios 库进行封装,可以轻松地进行 API 请求和响应处理。 5. 状态管理:Vue-Admin-Template 采用了 Vuex 进行状态管理,可以方便地进行状态管理和数据共享。 总之,Vue-Admin-Template 的开发视图非常清晰,组件结构、组件交互、路由配置、数据交互和状态管理都非常规范和易于理解。这为开发者提供了一个良好的开发框架,可以快速开发出高质量的后台管理系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值