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>

添加图标

为组件添加 prefix-icon 和 suffix-icon 属性设置输入框的首部图标与尾部图标, 值为通用字体图标的className。你可以通过slot的方式来自定义图标

查看代码 < />

<template>
  <w-input v-model="value1" prefix-icon="w-icon-search"></w-input>
  <w-input v-model="value2">
    <template slot="prefix">
      <i class="w-input__prefix w-input__icon w-icon-user-solid" />
    </template>
  </w-input>
  <w-input v-model="value3" suffix-icon="w-icon-scan"
    clearable placeholder="请输入地址"></w-input>
  <w-input v-model="value4">
    <template slot="suffix">
      <i class="w-input__suffix w-input__icon w-icon-info-circle" />
    </template>
  </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>

普通文本

ml

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>
0 / 100

文本域

将组件的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前端组
上次更新: 1/13/2021, 12:35:13 PM