From 72b013a44099b4544a64f04c6b5278c00ad3a5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=98=89=E6=B6=B5?= Date: Fri, 22 Sep 2017 14:54:05 +0800 Subject: [PATCH] Field: support $attrs & $listeners --- docs/examples-docs/field.md | 139 ++++++++++++++------------------ docs/src/ExamplesApp.vue | 86 +------------------- docs/src/examples.js | 5 +- docs/src/index.js | 5 +- packages/field/index.vue | 118 ++++++++++----------------- packages/vant-css/src/field.css | 2 +- test/unit/specs/field.spec.js | 36 +++------ yarn.lock | 4 +- 8 files changed, 121 insertions(+), 274 deletions(-) diff --git a/docs/examples-docs/field.md b/docs/examples-docs/field.md index 377ab8bfd..4865b5746 100644 --- a/docs/examples-docs/field.md +++ b/docs/examples-docs/field.md @@ -1,8 +1,6 @@ @@ -10,17 +8,11 @@ export default { data() { return { - username: 'zhangmin' + value: '', + password: '', + username: 'zhangmin', + message: '' }; - }, - methods: { - onIconClick() { - this.username = ''; - }, - - onFieldBlur() { - console.log('blured'); - } } }; @@ -39,92 +31,78 @@ Vue.component(Field.name, Field); ### 代码演示 #### 基础用法 - -根据`type`属性显示不同的输入框。 +通过 v-model 绑定输入框的值 :::demo 基础用法 ```html + + + +``` +::: + +#### 自定义类型 +根据`type`属性定义不同类型的输入框 + +:::demo 自定义类型 +```html + placeholder="请输入用户名" + required + @click-icon="username = ''" + > + + - - ``` ::: -#### 无label的输入框 +#### 禁用输入框 -不传入`label`属性即可。 - -:::demo 无label的输入框 +:::demo 禁用输入框 ```html - + ``` ::: -#### 带border的输入框 +#### 错误提示 -传入一个`border`属性。 - -:::demo 带border的输入框 -```html -
- -
-``` -::: - -#### 禁用的输入框 - -传入`disabled`属性即可。 - -:::demo 禁用的输入框 +:::demo 错误提示 ```html - + ``` ::: -#### 错误的输入框 +#### 高度自适应 +对于 textarea,可以通过`autosize`属性设置高度自适应 -传入`error`属性即可。 - -:::demo 错误的输入框 +:::demo 高度自适应 ```html - - -``` -::: - - -#### Autosize的输入框(仅支持textarea) - -传入`autosize`属性, 且将`rows`设为1。 - -:::demo 错误的输入框 -```html - - + + ``` ::: @@ -133,23 +111,24 @@ Vue.component(Field.name, Field); | 参数 | 说明 | 类型 | 默认值 | 可选值 | |-----------|-----------|-----------|-------------|-------------| -| type | 输入框类型 | `String` | `text` | `text`, `number`, `email`, `url`, `tel`, `date`, `datetime`, `password`, `textarea` | -| placeholder | 输入框placeholder | `String` | | | -| value | 输入框的值 | `String` | | | -| label | 输入框标签 | `String` | | | -| disabled | 是否禁用输入框 | `Boolean` | `false` | | -| error | 输入框是否有错误 | `Boolean` | `false` | | -| readonly | 输入框是否只读 | `Boolean` | `false` | | -| maxlength | 输入框maxlength | `String`, `Number` | | | -| rows | textarea rows | `String`, `Number` | | | -| cols | textarea cols | `String`, `Number` | | | -| autosize | 自动调整高度(仅支持textarea) | `Boolean` | `false` | `true`, `false` | -| icon | 输入框尾部图标 | `String` | | icon中支持的类型 | -| onIconClick | 点击图标的回调函数 | `Function` | | | +| type | 输入框类型 | `String` | `text` | `number` `email`
`textarea` `tel`
`datetime` `date`
`password` `url` | +| value | 输入框的值 | `String` | - | - | +| label | 输入框标签 | `String` | - | - | +| disabled | 是否禁用输入框 | `Boolean` | `false` | - | +| error | 输入框是否有错误 | `Boolean` | `false` | - | +| autosize | 高度自适应(仅支持textarea) | `Boolean` | `false` | - | +| icon | 输入框尾部图标 | `String` | - | Icon 组件支持的类型 | + +### Event + +| 事件名称 | 说明 | 回调参数 | +|-----------|-----------|-----------| +| focus | 输入框聚焦时触发 | - | +| blur | 输入框失焦时触发 | - | +| click-icon | 点击尾部图标时触发 | - | ### Slot | name | 描述 | |-----------|-----------| | icon | 自定义icon | - diff --git a/docs/src/ExamplesApp.vue b/docs/src/ExamplesApp.vue index ae9d63a7a..201ab0f1e 100644 --- a/docs/src/ExamplesApp.vue +++ b/docs/src/ExamplesApp.vue @@ -1,93 +1,9 @@ - - diff --git a/docs/src/examples.js b/docs/src/examples.js index 50a74e6e4..edeb94775 100644 --- a/docs/src/examples.js +++ b/docs/src/examples.js @@ -42,5 +42,6 @@ if (process.env.NODE_ENV !== 'production') { new Vue({ // eslint-disable-line render: h => h(App), - router -}).$mount('#app-container'); + router, + el: '#app-container' +}); diff --git a/docs/src/index.js b/docs/src/index.js index 2133b5ed0..bb2d3d9e2 100644 --- a/docs/src/index.js +++ b/docs/src/index.js @@ -41,5 +41,6 @@ if (process.env.NODE_ENV !== 'production') { new Vue({ // eslint-disable-line render: h => h(App), - router -}).$mount('#app-container'); + router, + el: '#app-container' +}); diff --git a/packages/field/index.vue b/packages/field/index.vue index e7b5cb489..ba281a720 100644 --- a/packages/field/index.vue +++ b/packages/field/index.vue @@ -1,47 +1,43 @@