使用 Vue 方法,计算属性,监听器完成简易计算器

一、效果图

在这里插入图片描述

二、思路

方法:

  • 定义一个方法,可以计算结果
  • input添加@input事件

计算属性:

  • 定义一个方法,可以计算结果
  • 定义计算属性
  • 在计算属性的get方法中调用方法

监听器:

  • 定义一个方法,可以计算结果
  • 监听属性变化
  • 在属性变化时调用方法计算结果

三、实现过程

1.通过vue脚手架创建项目

vue create Dome

2.删除自带的模板

3.创建组件

  • 创建CalcOne.vue

    <template>
    	<div class="box">
    		<div class="title">方法</div>
    		<!-- 
    			第一个数
    			v-model绑定属性,number将值转换为整数
    			@input 输入框输入事件
    		-->
    		<input type="text" v-model.number="num1" @input="inp"/>
            <!-- 遍历选项 -->
    		<select v-model="opt" @change="inp">
    			<option v-for="o in opts" :key="o">{{ o }}</option>
    		</select>
            <!-- 第二个数 -->
    		<input type="text" v-model.number="num2" @input="inp"/>
    		=
            <!-- 结果 -->
    		<span class="result">{{ result }}</span>
    
    		<hr />
    	</div>
    </template>
    
    <script>
    
    export default {
    	name: 'CalcOne',
    	data(){
    		return{
    			opts:['+','-','*','/'], // 运算符
    			num1:'', // 第一个数
    			num2:'', // 第二个数
    			opt:'+', // 运算符
    			result:'' // 结果
    		}
    	},
    	methods:{
    		inp(){
                // 如果两个数为空,则不进行计算
    			if(this.num1 === '' || this.num2 === '') return;
                // 根据选择的运算符进行相关运算
    			switch (this.opt){
    				case '+':
    					this.result = this.num1 + this.num2;
    					break;
    				case '-':
    					this.result = this.num1 - this.num2;
    					break;
    				case '*':
    					this.result = this.num1 * this.num2;
    					break;
    				case '/':
                        // 0 不能被除
    					if(this.num2 === 0){
    						alert('被除数不可为0');
    						this.num2 = 1;
    						return;
    					}
    					this.result = this.num1 / this.num2;
    					break;
    			}
    		}
    	}
    };
    </script>
    
  • 创建CalcTwo.vue

    <template>
    	<div class="box">
    		<div class="title">计算属性</div>
            <!-- 调用计算属性 -->
    		<input type="text" v-model.number="num1s"/>
            <!-- 调用计算属性 -->
    		<select v-model="optFun">
    			<option v-for="o in opts" :key="o">{{ o }}</option>
    		</select>
            <!-- 调用计算属性 -->
    		<input type="text" v-model.number="num2s"/>
    		=
    		<span class="result">{{ result }}</span>
    		<hr/>
    	</div>
    </template>
    <script>
    export default {
    	name: 'CalcTwo',
    	data() {
    		return {
    			opts: ['+', '-', '*', '/'],
    			num1: '',
    			num2: '',
    			opt: '+',
    			result: ''
    		}
    	},
    	methods: {
            // 此方法可以进行结果的运算
    		inp() {
    			if (this.num1 === '' || this.num2 === '') return;
    			switch (this.opt) {
    				case '+':
    					this.result = this.num1 + this.num2;
    					break;
    				case '-':
    					this.result = this.num1 - this.num2;
    					break;
    				case '*':
    					this.result = this.num1 * this.num2;
    					break;
    				case '/':
    					if (this.num2 === 0) {
    						alert('被除数不可为0');
    						this.num2 = 1;
    						return;
    					}
    					this.result = this.num1 / this.num2;
    					break;
    			}
    		}
    	},
        // 计算属性
    	computed: {
           	// 第一个数
    		num1s: {
    			get() {
                    // 调用方法获取结果
    				this.inp();
    				return this.num1;
    			},
    			set(val) {
    				this.num1 = val;
    			}
    		},
            // 第二个数
    		num2s: {
    			get() {
    				this.inp();
    				return this.num2;
    			},
    			set(val) {
    				this.num2 = val;
    			}
    		},
            // 运算符
    		optFun: {
    			get() {
    				this.inp();
    				return this.opt;
    			},
    			set(val) {
    				this.opt = val;
    			}
    		}
    	}
    };
    </script>
    
  • 创建CalcThree.vue

    <template>
    	<div class="box">
    		<div class="title">监听器</div>
    		<input type="text" v-model.number="num1"/>
    		<select v-model="opt">
    			<option v-for="o in opts" :key="o">{{ o }}</option>
    		</select>
    		<input type="text" v-model.number="num2"/>
    		=
    		<span class="result">{{ result }}</span>
    		<hr />
    	</div>
    </template>
    <script>
    export default {
    	name: 'CalcThree',
    	data(){
    		return{
    			opts:['+','-','*','/'],
    			num1:'',
    			num2:'',
    			opt:'+',
    			result:''
    		}
    	},
    	methods:{
            // 此方法可以进行结果的运算
    		inp(){
    			if(this.num1 === '' || this.num2 === '') return;
    			switch (this.opt){
    				case '+':
    					this.result = this.num1 + this.num2;
    					break;
    				case '-':
    					this.result = this.num1 - this.num2;
    					break;
    				case '*':
    					this.result = this.num1 * this.num2;
    					break;
    				case '/':
    					if(this.num2 === 0){
    						alert('被除数不可为0');
    						this.num2 = 1;
    						return;
    					}
    					this.result = this.num1 / this.num2;
    					break;
    			}
    		}
    	},
        // 监听器
    	watch:{
            // 监听第一个数的变化
    		num1(){
                // 属性变化就调用方法
    			this.inp();
    		},
            // 监听第二个数的变化
    		num2(){
    			this.inp();
    		},
            // 监听运算符的变化
    		opt(){
    			this.inp();
    		}
    	}
    };
    </script>
    

4.导入组件

在App.vue中引用组件

<template>
	<div id="app">
		<CalcOne />
		<CalcTwo />
		<CalcThree />
	</div>
</template>

<script>
import CalcOne from './components/CalcOne.vue';
import CalcTwo from './components/CalcTwo.vue';
import CalcThree from './components/CalcThree.vue';
export default {
    components: {CalcOne,CalcTwo,CalcThree},
	name: "App",
};
</script>

5.运行程序


代码地址:使用Vue的方法,计算属性,监听器制作简易计算器 · 紫豪啊/Vue实例集合 - 码云 - 开源中国 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱研究的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值