Input 输入框
代码演示
基础用法
Input输入框组件最基础的用法。
查看代码 < />
<template>
  <w-input v-model="value" placeholder="请输入主诉"></w-input>
</template>
<script>
  export default {
    data () {
      return {
        value: ''
      }
    }
  }
</script>禁用状态
为组件添加 disabled 属性即可禁用输入框。
查看代码 < />
<template>
  <w-input v-model="value" placeholder="请输入内容" disabled></w-input>
</template>
<script>
  export default {
    data () {
      return {
        value: ''
      }
    }
  }
</script>清空内容
为组件添加 clearable 属性即可激活清空内容的功能按钮。
查看代码 < />
<template>
  <w-input v-model="value" placeholder="请输入内容" clearable></w-input>
</template>
<script>
  export default {
    data () {
      return {
        value: ''
      }
    }
  }
</script>尺寸选择
一般地, 推荐使用 size='medium' 以达到精致紧凑的视觉效果, 但仍有不同尺寸 (large / medium / small / mini) 以供选择。
查看代码 < />
<template>
  <w-input v-model="value1" size="large" placeholder="large (36)"></w-input>
  <w-input v-model="value2" size="medium" placeholder="medium (32)"></w-input>
  <w-input v-model="value3" size="small" placeholder="small (28)"></w-input>
  <w-input v-model="value4" size="mini" placeholder="mini (24)"></w-input>
</template>
<script>
  export default {
    data () {
      return {
        value1: '',
        value2: '',
        value3: '',
        value4: ''
      }
    }
  }
</script>聚焦时展开列表
输入时展开列表
自定义模板
选择输入框
当输入框 输入内容 或 聚焦输入框 时会呈现一个下拉菜单提供选择。
查看代码 < />
<template>
  <div class="demo-wrapper">
    <h3>聚焦时展开列表</h3>
    <w-input-suggestion v-model="value" placeholder="请输入科室名称"
      :fetchSuggestionList="querySuggestions"></w-input-suggestion>
  </div>
  <div class="demo-wrapper">
    <h3>输入时展开列表</h3>
    <w-input-suggestion v-model="value" placeholder="请输入科室名称"
      :isFocusTrigger="false" clearable
      :fetchSuggestionList="querySuggestions"
      @select="handleSelect"></w-input-suggestion>
  </div>
  <div class="demo-wrapper">
    <h3>自定义模板</h3>
    <w-input-suggestion v-model="value"
      placeholder="请输入科室名称" popper-class="my-popper"
      :fetchSuggestionList="querySuggestions" @select="handleSelect">
      <template slot-scope="{item}">
        <span v-text="item.value" class="value"></span>
        <span v-text="`(${item.count}人次)`" class="count"></span>
      </template>
    </w-input-suggestion>
  </div>
</template>
<script>
  export default {
    data () {
      return {
        value1: '',
        value2: '',
        value3: '',
        list: [{
          value: '全科诊疗科',
          count: 22
        }, {
          value: '妇产科',
          count: 18
        }, {
          value: '中医门诊',
          count: 8
        }, {
          value: '普通急诊',
          count: 10
        }, {
          value: '泌尿科',
          count: 3
        }]
      }
    },
    methods: {
      querySuggestions (query, cb) {
        let current = this.list
        let results = query ? current.filter(item => {
          return item && item.value.toLowerCase().indexOf(query.toLowerCase()) > -1
        }) : current;
        cb(results)
      },
      handleSelect (current) {
        console.log(current)
      }
    }
  }
</script>
<style lang="scss">
.my-popper {
  .count {
    float: right;
    color: #ccc;
  }
}
</style>远程搜索
向服务端异步请求数据时, 可以参考此例。
查看代码 < />
<template>
  <w-input-suggestion v-model="value" placeholder="请输入科室名称"
    :fetchSuggestionList="queryDataAsync"></w-input-suggestion>
</template>
<script>
  export default {
    data () {
      return {
        value: '',
        list: []
      }
    },
    methods: {
      renderAllList () {
        return [{
          value: '全科诊疗科'
        }, {
          value: '妇产科'
        }, {
          value: '中医门诊'
        }, {
          value: '普通急诊'
        }, {
          value: '泌尿科'
        }]
      },
      queryDataAsync (query, cb) {
        // 模拟数据请求
        clearTimeout(this.timeout)
        this.timeout = setTimeout(() => {
          let current = this.list
          let results = query ? current.filter(item => {
            return item && item.value.toLowerCase().indexOf(query.toLowerCase()) > -1
          }) : current
          cb(results)
        }, 3000 * Math.random())
      }
    },
    mounted () {
      this.list = this.renderAllList()
    }
  }
</script>普通文本
icon按钮
推荐输入组合
复合输入框
为组件添加 pre-append 和 suf-append 属性设置输入框的首部元素与尾部元素, 如果suf-append传入的为普通文本元素, 可以用 sufAppendIsButton 将普通文本转变为按。
查看代码 < />
<template>
  <section class="demo-wrapper">
    <h3 class="label">普通文本</h3>
      <w-input v-model="value1">
        <template slot="pre-append">
          <w-select v-model="value4" placeholder="请选择">
            <w-option v-for="item in list"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </w-option>
          </w-select>
        </template>
        <template slot="suf-append"><span style="padding: 0 5px;">ml</span></template>
      </w-input>
  </section>
  <section class="demo-wrapper">
    <h3 class="label">icon按钮</h3>
      <w-input v-model="value2" sufAppendIsButton>
        <template slot="suf-append">
          <i class="w-icon-search expand-range"></i>
        </template>
      </w-input>
  </section>
  <section class="demo-wrapper">
    <h3 class="label">推荐输入组合</h3>
      <w-input-suggestion v-model="value3" value-key="label"
        :fetchSuggestionList="querySuggestions">
        <template slot="suf-append">
          <w-button type="primary">submit</w-button>
        </template>
      </w-input-suggestion>
  </section>
</template>
<script>
  export default {
    data () {
      return {
        value1: '',
        value2: '',
        value3: '',
        value4: '',
        list: [{
          label: '全科诊疗科',
          value: 22
        }, {
          label: '妇产科',
          value: 18
        }, {
          label: '中医门诊',
          value: 8
        }, {
          label: '普通急诊',
          value: 10
        }, {
          label: '泌尿科',
          value: 3
        }],
      }
    },
    methods: {
      querySuggestions (query, cb) {
        let current = this.list
        let results = query ? current.filter(item => {
          return item && item.value.toLowerCase().indexOf(query.toLowerCase()) > -1
        }) : current
        cb(results)
      }
    }
  }
</script>
<style lang="scss">
// 扩展可点击区域
.expand-range {
  position: relative;
  &::after {
    position: absolute;
    top: -10px;
    left: -10px;
    right: -10px;
    bottom: -10px;
    content: '';
  }
}
</style>文本域
将组件的type设置为 'textarea' 即可将input切换为文本域。 'rows' 属性可以为文本域设置默认展示行数。
查看代码 < />
<template>
  <w-input v-model="value" type="textarea"
    :rows="4" :maxlength="100" showCounter></w-input>
</template>
<script>
  export default {
    data () {
      return {
        value: ''
      }
    }
  }
</script>API
Input Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | Version | 
|---|---|---|---|---|---|
| autocomplete | 是否使用浏览器的记忆功能自动填充文本 | String | — | on / off | |
| clearable | 是否可以被清空 | Boolean | — | false | |
| disabled | 禁用输入框 | Boolean | — | false | |
| is-center | 文字是否居中对齐(默认为左对齐) | Boolean | — | false | |
| maxlength | 最大输入长度 | Number | — | — | |
| minlength | 最小输入长度 | Number | — | — | |
| placeholder | 占位文本 | String | — | — | |
| prefix-icon | 输入框首部图标, 值为通用字体图标的className | String | — | — | |
| readonly | 是否只读 | Boolean | — | — | |
| rows | 行数(type为textarea时有效) |  Number | — | — | |
| resize | 是否允许文本域拖动操作(仅当type为textarea时生效) | String | none, both, horizontal, vertical | — | |
| suf-append-is-button | 复合输入框中尾部后缀是否为按钮 | Boolean | — | false | |
| size | 输入框尺寸 | String | large / medium / small / mini | medium | |
| show-counter | 是否显示计数(当且仅当showCounter为true, 同时设置了maxlength时有效) | Boolean | — | false | |
| suffix-icon | 输入框尾部图标, 值为通用字体图标的className | String | — | — | |
| type | 类型 | String | text / textarea / password 等其他原生type可选值 | text | 
Input-Suggestion Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | Version | 
|---|---|---|---|---|---|
| autocompelete | 是否使用浏览器的记忆功能自动填充文本 | String | — | on / off | |
| clearable | 是否可以被清空 | Boolean | — | false | |
| disabled | 禁用输入框 | Boolean | — | false | |
| empty-placeholder | 下拉无数据占位文本 | String | — | — | |
| fetch-suggestion-list | 返回推荐列表的方法, 使用cb([])来返回 | Function | — | (query, cb) | |
| is-center | 文字是否居中对齐(默认为左对齐) | Boolean | — | false | |
| is-focus-trigger | 是否为聚焦展开下拉 | Boolean | — | true | |
| maxlength | 最大输入长度 | Number | — | — | |
| minlength | 最小输入长度 | Number | — | — | |
| min-popper-height | 最小下拉面板高度 | String | 75px | — | v1.7.16 | 
| placeholder | 输入框占位文本 | String | — | — | |
| prefix-icon | 输入框首部图标, 值为通用字体图标的className | String | — | — | |
| popper-class | 为下拉列表添加class | String | — | — | |
| readonly | 是否只读 | Boolean | — | — | |
| size | 输入框尺寸 | String | large / medium / small / mini | medium | |
| suffix-icon | 输入框尾部图标, 值为通用字体图标的className | String | — | — | |
| value-key | 被选中项的属性名, 用于填充input | String | — | value | 
Input Methods
| 参数 | 说明 | 回调参数 | Version | 
|---|---|---|---|
| blur | 使 input 获取焦点 | — | |
| focus | 使 input 失去焦点 | — | 
Input Events
| 参数 | 说明 | 回调参数 | Version | 
|---|---|---|---|
| blur | input失去焦点时触发 | — | |
| change | input失去焦点或在focus状态按下回车键时触发 | — | |
| clear | 点击清除按钮清空input值时触发 | — | |
| focus | input取得焦点时触发 | — | |
| input | 输入发生变化时即刻触发 | — | |
| sufAppendClick | 尾部按钮被点击时触发(仅在复合输入框, 且sufAppendIsButton = true时生效) | — | 
Input-suggestion Events
| 参数 | 说明 | 回调参数 | Version | 
|---|---|---|---|
| clear | 点击清除按钮清空input值时触发 | — | |
| select | 点选下拉某一项时触发 | 当前选中的项 | 
贡献者
| 类型 | 参与者 | 
|---|---|
| 设计者 | UED视觉组 | 
| 维护者 | UED前端组 |