• Vue封装组件之计数器实现


    新的学习之旅。
    模仿饿了么团队的Element组件库
    Vue官方文档:Vue.js
    Elemet 官方文档:Element UI

    要实现的组件功能如下:

    在这里插入图片描述

    组件代码

    <template>
    	<view class="count">
    		<button class="before" @click="down">-</button>
    		<input type="text" :value="currentInputValue" @blur.prevent="handleInput" />
    		<button class="after" @click="up">+</button>
    	</view>
    </template>
    
    <script>
    	export default {
    		props:{
    			myNum:{
    				type: Number,
    				default:()=>{
    					return 1; 
    				}
    			},
    			min:{
    				type: Number
    			},
    			max:{
    				type: Number
    			}
    		},
    		data() {
    			return {
    				currentInputValue: this.myNum,
    				currentMin: this.min ,
    				currentMax: this.max
    			}
    		},
    		methods: {
    			// 减
    			down:function(){
    				
    				if(this.currentMin!=undefined) {
    					if(parseInt(this.currentInputValue-1)>=this.currentMin) {
    						this.currentInputValue = this.currentInputValue-1 ;
    						this.$emit('changeNum',parseInt(this.currentInputValue))
    					}
    				} else {
    					this.currentInputValue = this.currentInputValue-1 ;
    					this.$emit('changeNum',parseInt(this.currentInputValue))
    				}
    				
    			},
    			// 加 
    			up:function(){
    				if(this.currentMax!=undefined) {
    					if(parseInt(this.currentInputValue+1)<=this.currentMax) {
    					this.currentInputValue = this.currentInputValue+1 ;
    					this.$emit('changeNum',parseInt(this.currentInputValue))
    				}
    				} else {
    					this.currentInputValue = this.currentInputValue+1 ;
    					this.$emit('changeNum',parseInt(this.currentInputValue))
    				}
    				
    			},
    			// 输入框改变
    			handleInput: function(e){
    				let value = e.target.value ;
    				let emitValue = 1 ;
    				// 防止输入不合法
    					emitValue = parseInt(value) ;
    				
    				if(emitValue > this.currentMax) {
    					emitValue = this.currentMax ;
    				}
    				
    				if( emitValue < this.currentMin) {
    					emitValue = parseInt(this.currentMin) ;
    				}
    				
    				this.currentInputValue = emitValue ;
    				this.$emit('changeNum',parseInt(this.currentInputValue))
    			}
    		}
    	}
    </script>
    
    <style>
    	.count{
    		 360rpx;
    		display: flex;
    		align-items: center;
    		
    	}
    	.count input{
    		 100%;
    	    background-color: #fff;
    	    background-image: none;
    	    border-radius: 4px;
    	    border: 1px solid #dcdfe6;
    	    box-sizing: border-box;
    	    color: #606266;
    	    display: inline-block;
    	    font-size: inherit;
    	    height: 80rpx;
    	    line-height: 40px;
    	    outline: none;
    	    padding: 0 15px;
    		text-align: center;
    	}
    	.count .before{
    		    105rpx;
    			height: 38px ;
    			line-height:38px
    	}
    	.count .after{
    		    105rpx;
    			height: 38px;
    			line-height:38px
    	}
    </style>
    
    

    在其他vue中引入

    <template>
    	<div>
    		<view class="wrap">
    			<input-number :myNum='myNum' @changeNum="changeNum" :min="1" :max="12"></input-number>
    		</view>
    </template>
    <script>
    	import InputNumber from '@/pages/components/inputNumber/inputNumber'
    
    	export default {
    		components: {
    			InputNumber
    		},
    		data() {
    			
    			return {
    				myNum: 1,
    			}
    		},
    		onLoad() {
    
    
    		},
    		methods: {
    			changeNum: function(num) {
    				// console.log(num)
    				// console.log(num)
    			},
    		}
    	}
    </script>
    
    <style>
    	.content {
    
    		display: flex;
    		flex-direction: column;
    		align-items: center;
    		justify-content: center;
    	}
    
    	.text-area {
    		display: flex;
    		justify-content: center;
    	}
    
    	.title,
    	.age {
    		font-size: 36rpx;
    		color: #8f8f94;
    		margin-bottom: 10rpx;
    	}
    
    	.wrap {
    		padding: 1rpx;
    
    	}
    
    	.wrap2 {
    		/* height: 300px!important; */
    		background-color: rgb(243, 244, 246);
    	}
    
    	.wrap2 uni-swiper {
    		height: 300px !important
    	}
    </style>
    
    充满鲜花的世界到底在哪里
  • 相关阅读:
    『开源』仿SQLServer山寨一个 跨数据库客户端
    『开源』也顺手写一个 科学计算器:重磅开源
    『转载』还在找字体?收下这份最全可商用免费字体清单!
    『开源协议』Creative Commons Attribution 3.0 License . 协议的个人理解,并 转载分享 4000个 精美可商用小图标
    『卧槽』意外发现了 Hashtable 的 foreach 用法 BUG
    『性能』List 和 HashSet 查找性能比较 (任何数据量的检索 从此只用 HashSet )
    『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制
    『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定
    『随笔』.Net 底层 数组[] 的 基本设计探秘 512 子数组
    『转载』中国芯片差在哪?这篇讲全了
  • 原文地址:https://www.cnblogs.com/aliases/p/14870416.html
Copyright © 2020-2023  润新知