フォーム要素を使用すると、柔軟で美しいフォームレイアウトを作成できます。フォーム要素は、よく知られているリストビュー(リスト と リストアイテム Vue コンポーネント)ですが、いくつかの追加コンポーネントが備わっています。
以下のコンポーネントが含まれています。
ListInput - リストアイテム入力要素| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
| accept | 文字列 | 数値 | 入力のネイティブな "accept" 属性の値 | |
| autocapitalize | 文字列 | 入力のネイティブな "autocapitalize" 属性の値 | |
| autocomplete | 文字列 | 入力のネイティブな "autoComplete" 属性の値 | |
| autocorrect | 文字列 | 入力のネイティブな "autocorrect" 属性の値 | |
| autofocus | ブール値 | 入力のネイティブな "autofocus" 属性の値 | |
| autosave | 文字列 | 入力のネイティブな "autosave" 属性の値 | |
| clearButton | ブール値 | false | 入力クリアボタンを追加します |
| colors | オブジェクト | Tailwind CSS カラークラスを含むオブジェクト | |
| colors.bgIos | 文字列 | '' | |
| colors.bgMaterial | 文字列 | 'bg-md-light-surface-variant dark:bg-md-dark-surface-variant' | |
| colors.errorBorder | 文字列 | 'border-red-500' | |
| colors.errorText | 文字列 | 'text-red-500' | |
| colors.labelTextFocusIos | 文字列 | '' | |
| colors.labelTextFocusMaterial | 文字列 | 'text-md-light-primary dark:text-md-dark-primary' | |
| colors.labelTextIos | 文字列 | '' | |
| colors.labelTextMaterial | 文字列 | 'text-md-light-on-surface-variant dark:text-md-dark-on-surface-variant' | |
| colors.outlineBorderFocusIos | 文字列 | 'border-primary' | |
| colors.outlineBorderFocusMaterial | 文字列 | 'border-md-light-primary dark:border-md-dark-primary' | |
| colors.outlineBorderIos | 文字列 | 'border-black border-opacity-30 dark:border-white dark:border-opacity-30' | |
| colors.outlineBorderMaterial | 文字列 | 'border-md-light-on-surface dark:border-md-dark-on-surface' | |
| colors.outlineLabelBgIos | 文字列 | 'bg-ios-light-surface-1 dark:bg-ios-dark-surface-1' | |
| colors.outlineLabelBgMaterial | 文字列 | 'bg-md-light-surface dark:bg-md-dark-surface' | |
| component | 文字列 | 'li' | コンポーネントのHTML要素 |
| disabled | ブール値 | 入力を無効としてマークします | |
| dropdown | ブール値 | false | 追加のドロップダウンアイコンを表示します(`select` 入力と併用すると便利です) |
| error | 文字列 | 入力の「エラー」の内容 | |
| floatingLabel | ブール値 | false | フローティングラベルを作成します |
| info | 文字列 | 入力の「情報」の内容 | |
| inputClass | 文字列 | 追加の入力スタイル | |
| inputId | 文字列 | 入力のid属性 | |
| inputmode | 文字列 | 入力のネイティブな "inputmode" 属性の値 | |
| inputStyle | CSSProperties | 追加の入力クラス | |
| label | 文字列 | ラベルの内容 | |
| max | 文字列 | 数値 | 入力のネイティブな "max" 属性の値 | |
| maxlength | 文字列 | 数値 | 入力のネイティブな "maxlength" 属性の値 | |
| min | 文字列 | 数値 | 入力のネイティブな "min" 属性の値 | |
| minlength | 文字列 | 数値 | 入力のネイティブな "minlength" 属性の値 | |
| multiple | ブール値 | 入力のネイティブな "multiple" 属性の値 | |
| name | 文字列 | 入力名 | |
| outline | ブール値 | undefined | アウトラインスタイルの入力(周囲にボーダー付き)を表示します。`outlineIos` と `outlineMaterial` を上書きします。 |
| outlineIos | ブール値 | false | iOSテーマでアウトラインスタイルの入力(周囲にボーダー付き)を表示します。 |
| outlineMaterial | ブール値 | false | Materialテーマでアウトラインスタイルの入力(周囲にボーダー付き)を表示します。 |
| pattern | 文字列 | 入力のネイティブな "pattern" 属性の値 | |
| placeholder | 文字列 | 数値 | 入力プレースホルダー | |
| readonly | ブール値 | 入力を読み取り専用としてマークします | |
| required | ブール値 | 入力を必須としてマークします | |
| size | 文字列 | 数値 | 入力のネイティブな "size" 属性の値 | |
| spellcheck | 文字列 | 入力のネイティブな "spellcheck" 属性の値 | |
| step | 文字列 | 数値 | 入力のネイティブな "step" 属性の値 | |
| tabindex | 文字列 | 数値 | 入力のネイティブな "tabindex" 属性の値 | |
| type | 文字列 | 'text' | 入力の種類 |
| value | 任意 | 入力値 |
| 名前 | 型 | 説明 |
|---|---|---|
| blur | function(e) |
|
| change | function(e) |
|
| clear | function(e) |
|
| focus | function(e) |
|
| input | function(e) |
|
| 名前 | 説明 |
|---|---|
| error | 入力の「エラー」の内容 |
| info | 入力の「情報」の内容 |
| input | カスタム入力要素 |
| label | ラベルの内容 |
| media | リストアイテムの「メディア」領域の内容(例:アイコン) |
<template><k-page><k-navbar title="Form Inputs" /><k-block-title>Default</k-block-title><k-list inset-ios strong-ios><k-list-input label="Name" type="text" placeholder="Your name"><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Password"type="password"placeholder="Your password"><template #media><demo-icon /></template></k-list-input><k-list-input label="E-mail" type="email" placeholder="Your e-mail"><template #media><demo-icon /></template></k-list-input><k-list-input label="URL" type="url" placeholder="URL"><template #media><demo-icon /></template></k-list-input><k-list-input label="Phone" type="tel" placeholder="Your phone number"><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Gender"type="select"dropdowndefault-value="Male"placeholder="Please choose..."><template #media><demo-icon /></template><option value="Male">Male</option><option value="Female">Female</option></k-list-input><k-list-inputlabel="Birthday"type="date"default-value="2014-04-30"placeholder="Please choose..."><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Date time"type="datetime-local"placeholder="Please choose..."><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Textarea"type="textarea"placeholder="Bio"input-class="!h-20 resize-none"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Outline</k-block-title><k-list inset-ios strong-ios><k-list-input outline label="Name" type="text" placeholder="Your name"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Password"type="password"placeholder="Your password"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="E-mail"type="email"placeholder="Your e-mail"><template #media><demo-icon /></template></k-list-input><k-list-input outline label="URL" type="url" placeholder="URL"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Phone"type="tel"placeholder="Your phone number"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Gender"type="select"dropdowndefault-value="Male"placeholder="Please choose..."><template #media><demo-icon /></template><option value="Male">Male</option><option value="Female">Female</option></k-list-input><k-list-inputoutlinelabel="Birthday"type="date"default-value="2014-04-30"placeholder="Please choose..."><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Date time"type="datetime-local"placeholder="Please choose..."><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Textarea"type="textarea"placeholder="Bio"input-class="!h-20 resize-none"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Floating Labels</k-block-title><k-list inset-ios strong-ios><k-list-inputlabel="Name"floating-labeltype="text"placeholder="Your name"><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Password"floating-labeltype="password"placeholder="Your password"><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="E-mail"floating-labeltype="email"placeholder="Your e-mail"><template #media><demo-icon /></template></k-list-input><k-list-input label="URL" floating-label type="url" placeholder="URL"><template #media><demo-icon /></template></k-list-input><k-list-inputlabel="Phone"floating-labeltype="tel"placeholder="Your phone number"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Outline + Floating Labels</k-block-title><k-list inset-ios strong-ios><k-list-inputoutlinelabel="Name"floating-labeltype="text"placeholder="Your name"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Password"floating-labeltype="password"placeholder="Your password"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="E-mail"floating-labeltype="email"placeholder="Your e-mail"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="URL"floating-labeltype="url"placeholder="URL"><template #media><demo-icon /></template></k-list-input><k-list-inputoutlinelabel="Phone"floating-labeltype="tel"placeholder="Your phone number"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Validation + Additional Info</k-block-title><k-list inset-ios strong-ios><k-list-inputlabel="Name"type="text"placeholder="Your name"info="Basic string checking":value="name.value":error="name.changed && !name.value.trim() ? 'Please specify your name' : ''"@input="onNameChange"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Clear Button</k-block-title><k-list inset-ios strong-ios><k-list-inputlabel="TV Show"type="text"placeholder="Your favorite TV show"info="Type something to see clear button":value="demoValue":clear-button="demoValue.length > 0"@input="onDemoValueChange"@clear="onDemoValueClear"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Icon + Input</k-block-title><k-list inset-ios strong-ios><k-list-input type="text" placeholder="Your name"><template #media><demo-icon /></template></k-list-input><k-list-input type="password" placeholder="Your password"><template #media><demo-icon /></template></k-list-input><k-list-input type="email" placeholder="Your e-mail"><template #media><demo-icon /></template></k-list-input><k-list-input type="url" placeholder="URL"><template #media><demo-icon /></template></k-list-input></k-list><k-block-title>Label + Input</k-block-title><k-list inset-ios strong-ios><k-list-input label="Name" type="text" placeholder="Your name" /><k-list-inputlabel="Password"type="password"placeholder="Your password"/><k-list-input label="E-mail" type="email" placeholder="Your e-mail" /><k-list-input label="URL" type="url" placeholder="URL" /></k-list><k-block-title>Only Inputs</k-block-title><k-list inset-ios strong-ios><k-list-input type="text" placeholder="Your name" /><k-list-input type="password" placeholder="Your password" /><k-list-input type="email" placeholder="Your e-mail" /><k-list-input type="url" placeholder="URL" /></k-list><k-block-title>Inputs + Additional Info</k-block-title><k-list inset-ios strong-ios><k-list-inputtype="text"placeholder="Your name"info="Full name please"/><k-list-inputtype="password"placeholder="Your password"info="8 characters minimum"/><k-list-inputtype="email"placeholder="Your e-mail"info="Your work e-mail address"/><k-list-input type="url" placeholder="URL" info="Your website URL" /></k-list></k-page></template><script>import { ref } from 'vue';import {kPage,kNavbar,kNavbarBackLink,kBlockTitle,kList,kListInput,} from 'konsta/vue';import DemoIcon from '../components/DemoIcon.vue';export default {components: {kPage,kNavbar,kNavbarBackLink,kBlockTitle,kList,kListInput,DemoIcon,},setup() {const name = ref({ value: '', changed: false });const demoValue = ref('');const onNameChange = (e) => {name.value = { value: e.target.value, changed: true };};const onDemoValueChange = (e) => {demoValue.value = e.target.value;};const onDemoValueClear = () => {demoValue.value = '';};return {name,demoValue,onNameChange,onDemoValueChange,onDemoValueClear,};},};</script>