Vue 组件的输入/表单元素
表单元素允许你创建灵活和漂亮的表单布局。表单元素仅仅是众所周知的列表视图(列表和列表项 Vue 组件),但是拥有少量附加组件。
查看 Framework7 的输入/表单元素了解其外观。
输入组件
包含以下组件
f7-list-input
- 列表项输入元素f7-input
- 输入元素
输入属性
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
<f7-list-input> 属性 | |||
媒体 | 字符串 | 列表项媒体图片 URL | |
标签 | 字符串 | 输入标签文本 | |
浮动标签 | 布尔值 | 假 | 启用浮动标签 |
边框 | 布尔值 | 假 | 使输入边框化 |
输入 | 布尔值 | 真 | 是否要渲染输入元素。如果您要在内部使用自定义输入,请禁用此功能。 |
类型 | 字符串 | 输入类型。所有默认 HTML5 输入类型和一些特殊类型 | |
可缩放 | 布尔值 | 假 | 使文本区域可缩放 |
输入样式 | 字符串 对象 | 输入的“style”属性值,如果您需要传递额外的样式 | |
清除按钮 | 布尔值 | 假 | 添加输入清除按钮,单击该按钮将清除输入值 |
验证 | 布尔值 | 假 | 启用后,输入值将根据传递的“pattern”或输入类型在更改时进行验证。如果您使用自定义验证并且需要进一步控制显示/隐藏错误消息的位置,那么最好禁用验证并使用 error-message 与 error-message-force 属性配合使用。 |
失焦时验证 | 布尔值 | 假 | 启用后,输入仅在失焦时进行验证。 |
onValidate | 函数 | 在输入验证时执行回调,返回布尔值指示输入是否有效。
| |
错误消息 | 字符串 | 当输入值无效时显示的自定义错误消息 | |
错误消息强制 | 布尔值 | 假 | 强制错误消息。这在您使用自定义验证并希望在需要时显示/隐藏错误消息时很有用 |
信息 | 字符串 | 有关输入的自定义附加信息文本 | |
名称 | 字符串 | 输入名称 | |
占位符 | 字符串 | 输入占位符 | |
ID | 字符串 | 包装元素 ID 属性 | |
输入 ID | 字符串 | 输入元素 ID 属性 | |
值 | 字符串 数字 数组 对象 | 输入值。 如果 如果 如果 | |
输入模式 | 字符串 | 输入的原生“inputmode”属性的值 | |
大小 | 字符串 数字 | 输入的原生“size”属性的值 | |
图案 | 字符串 | 输入的原生“pattern”属性的值 | |
接受 | 字符串 数字 | 输入的原生“accept”属性的值 | |
自动完成 | 字符串 | 输入的原生“autocomplete”属性的值 | |
自动对焦 | 布尔值 | 假 | 输入的原生“autofocus”属性的值 |
autosave | 字符串 | 输入的原生“autosave”属性的值 | |
disabled | 布尔值 | 假 | 将输入标记为已禁用 |
max | 字符串 数字 | 输入的原生“max”属性的值 | |
min | 字符串 数字 | 输入的原生“min”属性的值 | |
step | 字符串 数字 | 输入的原生“step”属性的值 | |
maxlength | 字符串 数字 | 输入的原生“maxlength”属性的值 | |
minlength | 字符串 数字 | 输入的原生“minlength”属性的值 | |
multiple | 布尔值 | 假 | 输入的原生“multiple”属性的值 |
readonly | 布尔值 | 假 | 将输入标记为只读 |
required | 布尔值 | 假 | 将输入标记为必填项 |
tabindex | 字符串 数字 | 输入的原生“tabindex”属性的值 | |
no-store-data | 布尔值 | 假 | 当与表单存储配合使用时允许忽略输入值存储 |
ignore-store-data | 布尔值 | 假 | 与上一个相同 |
wrap | 布尔值 | 真 | 启用时,将包装在<li> 元素中 |
calendar-params | 对象 | 当type="datepicker" 时使用的具有日历参数的对象 | |
color-picker-params | 对象 | 当type="colorpicker" 时使用的具有颜色选择器参数的对象 | |
text-editor-params | 对象 | 当type="texteditor" 时使用的具有文本编辑器参数的对象 | |
<f7-input>属性 | |||
边框 | 布尔值 | 假 | 使输入边框化 |
wrap | 布尔值 | 真 | 定义是否用<div class="input"> 元素包装输入。 |
类型 | 字符串 | 输入类型。所有默认 HTML5 输入类型和一些特殊类型 | |
可缩放 | 布尔值 | 假 | 使文本区域可缩放 |
输入样式 | 字符串 对象 | 输入的“style”属性值,如果您需要传递额外的样式 | |
清除按钮 | 布尔值 | 假 | 添加输入清除按钮,单击该按钮将清除输入值 |
验证 | 布尔值 | 假 | 启用后,输入值将根据传递的“pattern”或输入类型在更改时进行验证。如果您使用自定义验证并且需要进一步控制显示/隐藏错误消息的位置,那么最好禁用验证并使用 error-message 与 error-message-force 属性配合使用。 |
失焦时验证 | 布尔值 | 假 | 启用后,输入仅在失焦时进行验证。 |
onValidate | 函数 | 在输入验证时执行回调,返回布尔值指示输入是否有效。
| |
错误消息 | 字符串 | 当输入值无效时显示的自定义错误消息 | |
错误消息强制 | 布尔值 | 假 | 强制错误消息。这在您使用自定义验证并希望在需要时显示/隐藏错误消息时很有用 |
信息 | 字符串 | 有关输入的自定义附加信息文本 | |
名称 | 字符串 | 输入名称 | |
占位符 | 字符串 | 输入占位符 | |
ID | 字符串 | 包装元素 ID 属性 | |
输入 ID | 字符串 | 输入元素 ID 属性 | |
值 | 字符串 数字 | 输入值。 如果 如果 如果 | |
输入模式 | 字符串 | 输入的原生“inputmode”属性的值 | |
大小 | 字符串 数字 | 输入的原生“size”属性的值 | |
图案 | 字符串 | 输入的原生“pattern”属性的值 | |
接受 | 字符串 数字 | 输入的原生“accept”属性的值 | |
自动完成 | 字符串 | 输入的原生“autocomplete”属性的值 | |
自动对焦 | 布尔值 | 假 | 输入的原生“autofocus”属性的值 |
autosave | 字符串 | 输入的原生“autosave”属性的值 | |
checked | 布尔值 | 假 | 将输入标记为选中 |
disabled | 布尔值 | 假 | 将输入标记为已禁用 |
max | 字符串 数字 | 输入的原生“max”属性的值 | |
min | 字符串 数字 | 输入的原生“min”属性的值 | |
step | 字符串 数字 | 输入的原生“step”属性的值 | |
maxlength | 字符串 数字 | 输入的原生“maxlength”属性的值 | |
minlength | 字符串 数字 | 输入的原生“minlength”属性的值 | |
multiple | 布尔值 | 假 | 输入的原生“multiple”属性的值 |
readonly | 布尔值 | 假 | 将输入标记为只读 |
required | 布尔值 | 假 | 将输入标记为必填项 |
tabindex | 字符串 数字 | 输入的原生“tabindex”属性的值 | |
no-store-data | 布尔值 | 假 | 当与表单存储配合使用时允许忽略输入值存储 |
ignore-store-data | 布尔值 | 假 | 与上一个相同 |
calendar-params | 对象 | 当type="datepicker" 时使用的具有日历参数的对象 | |
color-picker-params | 对象 | 当type="colorpicker" 时使用的具有颜色选择器参数的对象 | |
text-editor-params | 对象 | 当type="texteditor" 时使用的具有文本编辑器参数的对象 |
输入事件
事件 | 参数 | 描述 |
---|---|---|
<f7-list-input>,<f7-input>事件 | ||
focus | (event) | 当用户聚焦到输入时触发。 |
blur | (event) | 当用户失去输入焦点时触发。 |
输入 | (event) | input |
当输入的值发生更改时立即触发。注意:输入事件在beforeinput、keypress、keyup、keydown事件之后触发。 | (event) | change |
如果值发生更改,则在失去焦点时触发。 | (event) | input:clear |
点击输入清除按钮时触发 | (event) | textarea:resize |
如果可调整大小的文本区域调整了大小,则触发。event.detail 将包含具有initialHeight 、currentHeight 和scrollHeight 属性的对象 | (event) | input:empty |
输入值为空时触发 | (event) | input:notempty |
输入值不为空时触发 | calendar:change | (value) |
当type="datepicker" 的Calendar值发生更改时触发。作为参数,它接收一个数组,其中包含选定的日期。 | calendar:change | colorpicker:change |
当type="colorpicker" 的Color Picker值发生更改时触发。作为参数,它接收一个包含颜色选择器值的对象。 | calendar:change | texteditor:change |
当type="texteditor"
的Text Editor值发生更改时触发。作为参数,它接收文本编辑器值(HTML字符串)。
输入插槽
<f7-list-input>
有用于自定义元素的其他插槽info
- 元素会插入带有 info 消息的容器error-message
- 元素会插入带有 error 消息的容器label
- 元素会插入带有输入标签的容器input
- 元素会插入在 input 元素替代处(input
prop 还必须被设置为false
)root-start
- 元素会插入在<li>
元素的开头root
/root-end
- 元素会插入在<li>
元素的结尾content-start
- 元素会插入在<div class="item-content">
元素的开头content
/content-end
- 元素会插入在<div class="item-content">
元素的结尾inner-start
- 元素会插入在<div class="item-inner">
元素的开头inner
/inner-end
- 元素会插入在<div class="item-inner">
元素的结尾media
- 元素会插入在<div class="item-media">
元素的内部
输入 v-model
f7-list-input
和 f7-input
Vue 组件支持 v-model
on value
prop
<template>
<p>Name is {{ name }}</p>
<p>Email is {{ email }}</p>
...
<f7-list-input
label="Name"
type="text"
placeholder="Your name"
clear-button
v-model:value="name"
/>
<f7-input
type="text"
placeholder="Your email"
clear-button
v-model:value="email"
/>
...
</template>
<script>
export default {
data() {
name: '',
email: '',
},
...
};
</script>
示例
inputs.vue
<template>
<f7-page>
<f7-navbar title="Form Inputs"></f7-navbar>
<f7-block-title>Full Layout / Stacked Labels</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input label="Name" type="text" placeholder="Your name" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Password" type="password" placeholder="Your password" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="E-mail" type="email" placeholder="Your e-mail" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="URL" type="url" placeholder="URL" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Phone" type="tel" placeholder="Your phone number" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Gender" type="select" placeholder="Please choose...">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
<option value="Male">Male</option>
<option value="Female">Female</option>
</f7-list-input>
<f7-list-input label="Birthday" type="date" placeholder="Please choose...">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Date time" type="datetime-local" placeholder="Please choose...">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Range" :input="false">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
<template #input>
<f7-range :value="50" :min="0" :max="100" :step="1" />
</template>
</f7-list-input>
<f7-list-input label="Textarea" type="textarea" placeholder="Bio">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Resizable" type="textarea" resizable placeholder="Bio">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
</f7-list>
<f7-block-title>Floating Labels</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input label="Name" floating-label type="text" placeholder="Your name" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="Password"
floating-label
type="password"
placeholder="Your password"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="E-mail"
floating-label
type="email"
placeholder="Your e-mail"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="URL" floating-label type="url" placeholder="URL" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="Phone"
floating-label
type="tel"
placeholder="Your phone number"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input label="Resizable" floating-label type="textarea" resizable placeholder="Bio">
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
</f7-list>
<f7-block-title>Floating Labels + Outline Inputs</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input
outline
label="Name"
floating-label
type="text"
placeholder="Your name"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
outline
label="Password"
floating-label
type="password"
placeholder="Your password"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
outline
label="E-mail"
floating-label
type="email"
placeholder="Your e-mail"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input outline label="URL" floating-label type="url" placeholder="URL" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
outline
label="Phone"
floating-label
type="tel"
placeholder="Your phone number"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
outline
label="Bio"
floating-label
type="textarea"
resizable
placeholder="Bio"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
</f7-list>
<f7-block-title>Validation + Additional Info</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input
label="Name"
type="text"
placeholder="Your name"
info="Default validation"
required
validate
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="Fruit"
type="text"
placeholder="Type 'apple' or 'banana'"
required
validate
pattern="apple|banana"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
<template #info>
<span>Pattern validation (<b>apple|banana</b>)</span>
</template>
</f7-list-input>
<f7-list-input
label="E-mail"
type="email"
placeholder="Your e-mail"
info="Default e-mail validation"
required
validate
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="URL"
type="url"
placeholder="Your URL"
info="Default URL validation"
required
validate
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input
label="Number"
type="text"
placeholder="Enter number"
info="With custom error message"
error-message="Only numbers please!"
required
validate
pattern="[0-9]*"
clear-button
>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
</f7-list>
<f7-block-title>Icon + Input</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input type="text" placeholder="Your name" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input type="password" placeholder="Your password" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input type="email" placeholder="Your e-mail" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
<f7-list-input type="url" placeholder="URL" clear-button>
<template #media>
<f7-icon icon="demo-list-icon" />
</template>
</f7-list-input>
</f7-list>
<f7-block-title>Label + Input</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input label="Name" type="text" placeholder="Your name" clear-button></f7-list-input>
<f7-list-input
label="Password"
type="password"
placeholder="Your password"
clear-button
></f7-list-input>
<f7-list-input
label="E-mail"
type="email"
placeholder="Your e-mail"
clear-button
></f7-list-input>
<f7-list-input label="URL" type="url" placeholder="URL" clear-button></f7-list-input>
</f7-list>
<f7-block-title>Only Inputs</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input type="text" placeholder="Your name" clear-button></f7-list-input>
<f7-list-input type="password" placeholder="Your password" clear-button></f7-list-input>
<f7-list-input type="email" placeholder="Your e-mail" clear-button></f7-list-input>
<f7-list-input type="url" placeholder="URL" clear-button></f7-list-input>
</f7-list>
<f7-block-title>Inputs + Additional Info</f7-block-title>
<f7-list strong-ios dividers-ios inset-ios>
<f7-list-input
type="text"
placeholder="Your name"
info="Full name please"
clear-button
></f7-list-input>
<f7-list-input
type="password"
placeholder="Your password"
info="8 characters minimum"
clear-button
></f7-list-input>
<f7-list-input
type="email"
placeholder="Your e-mail"
info="Your work e-mail address"
clear-button
></f7-list-input>
<f7-list-input
type="url"
placeholder="URL"
info="Your website URL"
clear-button
></f7-list-input>
</f7-list>
</f7-page>
</template>
<script>
import {
f7Navbar,
f7Page,
f7BlockTitle,
f7List,
f7Icon,
f7ListInput,
f7Range,
} from 'framework7-vue';
export default {
components: {
f7Navbar,
f7Page,
f7BlockTitle,
f7List,
f7Icon,
f7ListInput,
f7Range,
},
};
</script>