vue輸入框組件開發(fā)過程詳解
本文實(shí)例為大家分享了vue輸入框組件開發(fā)過程的具體代碼,供大家參考,具體內(nèi)容如下
input-number.js
function isValueNumber(value) {
? ? return(/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9]*$)|(^-?0{1}$)/).test(value + '');
}
Vue.component('input-number',{
?? ?template: '\
?? ?<div class=input-number>\
?? ??? ?<input\
?? ??? ??? ?type="text"\
?? ??? ??? ?:value="currentValue"\
?? ??? ??? ?@change="handleChange"\
?? ??? ??? ?@focus="keyControl">\
?? ??? ?<button \
?? ??? ??? ?@click="handleDown" \
?? ??? ??? ?:disabled="currentValue<=min">-</button>\
?? ??? ?<button \
?? ??? ??? ?@click="handleUp" \
?? ??? ??? ?:disabled="currentValue>=max">+</button>\
?? ?</div>',
?? ?data: function (){
?? ??? ?return {
?? ??? ??? ?currentValue: this.value,
?? ??? ??? ?currentStep: this.$parent.step
?? ??? ?}
?? ?},
?? ?watch: {
?? ??? ?currentValue: function (val){
?? ??? ??? ?this.$emit('input',val);
?? ??? ??? ?this.$emit('on-change',val);
?? ??? ?},
?? ??? ?value: function(val){
?? ??? ??? ?this.updateValue(val);
?? ??? ?}
?? ?},
?? ?methods: {
?? ??? ?handleDown: function(){
?? ??? ??? ?if(this.currentValue<=this.min) return;
?? ??? ??? ?this.currentValue-=this.currentStep;
?? ??? ?},
?? ??? ?handleUp: function(){
?? ??? ??? ?if(this.currentValue>=this.max) return;
?? ??? ??? ?this.currentValue+=this.currentStep;
?? ??? ?},
?? ??? ?updateValue: function(val){
?? ??? ??? ?if(val>this.max) val=this.max;
?? ??? ??? ?if(val<this.min) val=this.min;
?? ??? ??? ?this.currentValue=val;
?? ??? ?},
?? ??? ?handleChange: function(event){
? ? ? ? ? ? var val = event.target.value.trim();
? ? ? ? ? ? var max = this.max;
? ? ? ? ? ? var min = this.min;
? ? ? ? ? ? if(isValueNumber(val)) {
? ? ? ? ? ? ? ? val = Number(val);
? ? ? ? ? ? ? ? this.currentValue = val;
? ? ? ? ? ? ? ? if(val > max) {
? ? ? ? ? ? ? ? ? ? this.current = max;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(val < min) {
? ? ? ? ? ? ? ? ? ? this.current = min;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? //如果輸入的不是數(shù)字,將輸入的內(nèi)容重置為之前的currentValue
? ? ? ? ? ? ? ? event.target.value = this.currentValue;
? ? ? ? ? ? }
?? ??? ??? ?
?? ??? ?},
?? ??? ?keyControl: function(){
?? ??? ??? ?var _this=this;
?? ??? ??? ?$(window).keydown(function(e){
?? ??? ??? ??? ?if($('input')){
?? ??? ??? ??? ??? ?if(e.keyCode==38){
?? ??? ??? ??? ??? ??? ?_this.handleUp();
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?else if(e.keyCode==40){
?? ??? ??? ??? ??? ??? ?_this.handleDown();
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?});
?? ??? ?}
?? ?},
?? ?mounted: function(){
?? ??? ?this.updateValue(this.value);
?? ?},
?? ?props:{
?? ??? ?max:{
?? ??? ??? ?type: Number,
?? ??? ??? ?default: Infinity
?? ??? ?},
?? ??? ?min: {
?? ??? ??? ?type: Number,
?? ??? ??? ?default: -Infinity
?? ??? ?},
?? ??? ?value: {
?? ??? ??? ?type:Number,
?? ??? ??? ?default: 0
?? ??? ?},
?? ??? ?step: {
?? ??? ??? ?type:Number,
?? ??? ??? ?default: 1
?? ??? ?}
?? ?}
})index.js
var app=new Vue({
?? ?el: "#app",
?? ?data: {
?? ??? ?value: 5,
?? ??? ?step: 10
?? ?}
})index.html
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="utf-8" /> ?? ??? ?<title></title> ?? ??? ?<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script> ?? ??? ?<script src="js/vue.js" type="text/javascript" charset="utf-8"></script> ?? ?</head> ?? ?<body> ?? ??? ?<div id="app"> ?? ??? ??? ?<input-number v-model="value" :max="100" :min="0"></input-number> ?? ??? ?</div> ?? ??? ?<script src="js/input-number.js" type="text/javascript" charset="utf-8"></script> ?? ??? ?<script src="js/index.js" type="text/javascript" charset="utf-8"></script> ?? ?</body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue嵌套路由與404重定向?qū)崿F(xiàn)方法分析
這篇文章主要介紹了vue嵌套路由與404重定向?qū)崿F(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js嵌套路由與404重定向的概念、原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
React和Vue實(shí)現(xiàn)路由懶加載的示例代碼
路由懶加載是一項(xiàng)關(guān)鍵技術(shù),它可以幫助我們提高Web應(yīng)用的加載速度,本文主要介紹了React和Vue實(shí)現(xiàn)路由懶加載的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
vue router動態(tài)路由設(shè)置參數(shù)可選問題
這篇文章主要介紹了vue-router動態(tài)路由設(shè)置參數(shù)可選,文中給大家提到了vue-router 動態(tài)添加 路由的方法,需要的朋友可以參考下2019-08-08
vue組件之間通信方式實(shí)例總結(jié)【8種方式】
這篇文章主要介紹了vue組件之間通信方式,結(jié)合實(shí)例形式總結(jié)分析了vue.js的8種組件通信方式與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-02-02
詳解無限滾動插件vue-infinite-scroll源碼解析
這篇文章主要介紹了詳解無限滾動插件vue-infinite-scroll源碼解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
詳細(xì)聊聊vue組件是如何實(shí)現(xiàn)組件通訊的
組件間通信簡單來說就是組件間進(jìn)行數(shù)據(jù)傳遞,就像我們?nèi)粘5拇螂娫?就是通訊的一種方式,下面這篇文章主要給大家介紹了關(guān)于vue組件是如何實(shí)現(xiàn)組件通訊的相關(guān)資料,需要的朋友可以參考下2022-05-05
vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)及滾動監(jiān)聽的方法
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)及滾動監(jiān)聽的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07

