练习1:创建一个数字输入框
Edit me
需求如下:
-
数字输入框只能输入数字(这个需要用到正则,先放一放)
-
包含两个快捷按钮,可以直接-1,或者+1
-
可以设置初始值、最大值和最小值(在父组件定义好,然后使用
props
传递给子组件) -
双向改变数据
-
增加一个控制步伐的props,比如设置为10,点击+,就一次增加10。
更多需求:
- 当输入框获取焦点时,按上下键可以增加和减少数字。
几个关键点
父子两级组件的通信
初始值、最小值,最大值都是由父组件决定,需要传递给子组件。
- 通过
v-bind
,将这些数据绑定到子组件标签上。 - 子组件用
props
选项来接收这些数据。 - 子组件将接收到的
value
数据保存到自身的一个变量中,对它进行修改(另一种做法是保存到组件的一个计算属性中)。
Note: 这里需要注意到
props
和data
的区别:props
来自父组件,而data
是组件自身的数据,作用域仅在自身。所以一般不会对接收到的props直接进行修改,而是会将接收到的数据保存到自身的数据或计算属性上,与父组件解耦。子组件里有个表单,与子组件的通信通过v-model
来实现双向通信。
- 通过
v-model="value"
实现双向绑定,并在子组件上的数据发生变化时,立即释放一个以特殊名称命名,也就是input
,的事件,并传递修改后的数据。 v-model
是个语法糖,它会自动接收到事件,并更新数据。
对更改后的数据进行watch
- 当
props
的value
发生变化时,立即更新currentValue
的值 - 当
currentValue
的值发生变化时,立即释放事件给父级