自定义组件问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < title >简易数字输入框组件</ title > </ head > < body > < div id = "app" > < input-number v-model = "value" :max = "20" :min = "0" ></ input-number > </ div > </ body > < script src = "https://cdn.bootcss.com/vue/2.5.13/vue.js" ></ script > < script src = "index.js" ></ script > </ html > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | function isValueNumber (value) { return (/(^-?[0-9] + \.{1}\d + $) | (^-?[1-9][0-9] * $) | (^-?0{1}$)/).test(value + '' ); } Vue.component( 'input-number' , { template: '\ <div class="input-number">\ <input\ type="text"\ :value="currentValue"\ @change="handleChange">\ <button \ @click="handleDown"\ :disabled="currentValue <= min">-</button>\ <button \ @click="handleUp"\ :disabled="currentValue >= max">+</button>\ </div>' , props: { max: { type: Number, default : Infinity }, min: { type: Number, default : Infinity }, value: { type: Number, default : 0 } }, data() { return { currentValue: this .value } }, 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 -= 1; }, handleUp: function () { if ( this .currentValue >= this .max) return ; this .currentValue += 1; }, 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 .currentValue = max; } else if (val < min) { this .currentValue = min; } } else { event.target.value = this .currentValue; } } }, mounted() { this .updateValue( this .value); } }); var app = new Vue({ el: '#app' , data: { value: 5 } }) |
老师,这个里面谁是父组件,谁是子组件啊
2
收起
正在回答 回答被采纳积分+1
2回答
热门框架Vue开发WebApp 18版
- 参与学习 人
- 提交作业 209 份
- 解答问题 3299 个
本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧