来扯点ionic3[5] 轻松上手表单:这些组件可以玩一年

本系列文集:来扯点ionic3

表单几乎是每一个应用程序中必不可少的一部分,在各类 HTML 教材中,表单也经常被拿出来作为独立一章来讲解,在 ionic 中,不直接使用 input 标签编写表单控件,而是有专门为仿真原生 ios/android 系统的表单组件。

在 ionic 中制作表单,需要列表的配合,列表的使用可参阅下文:

来扯点ionic3[4] 结构型指令和列表渲染

下面就来介绍一些表单组件的使用:

组件概览

文本输入:Input 组件

基本使用
<ion-list>
    <ion-item>
      <ion-label>标签</ion-label>
      <ion-input type="text" value=""></ion-input>
    </ion-item>
 </ion-list>

且注意 ion-input 是有结束标签的,并非 input 一样的单标签。


type属性

type 属性与 html 中 input 标签的 type 属性是类似的,可以使用 text、password 这类值,但是不支持 radio、checkbox 等非文本输入的类型。

值得一提的是,在移动应用开发时,input的type和其调出的手机键盘是紧密相连的,因此在开发时应该根据input的实际功能,细致地区分它们的 type,你也可以利用它们来验证这些值的合法性,常用的有:email、tel、url、number


tel

url

email

此外,如果你需要不带任何符号的纯数字键盘,可以用 pattern 属性用正则表达式将输入的内容限定位纯数字

<ion-input type="number" pattern="[0-9]*" value=""></ion-input>

Label 样式

ionic内置了几种 label 的展现样式,你可以像这样来定义它:

<ion-label>website</ion-label>
<ion-label fixed>Website</ion-label>
<ion-label stacked>Website</ion-label>
<ion-label floating>Website</ion-label>
不同的 label 样式

fixed 和默认的区别在于,默认仅仅是把标签和控件排在一行内,而 fixed 固定了标签的宽度,使用了 fixed 能让表单更整齐。


stacked 把标签固定在控件的左上方,使控件可以占据一整行;floating乍一看除了上面多出了一段空白,没有什么特别的地方,但它被激活以后,就会触发动画变成
stacked的样子(这在 Android 的应用中经常出现)。


动图:stacked 和 floating是这么玩的

列表单选:Radio组件

如果说 input 和我们写网页的习惯基本类似,那单选组件可能就不太一样了,毕竟选择操作在传统网页上和移动应用是有非常大的差别的。

基本使用
<ion-list radio-group>
    <ion-list-header>请选择:</ion-list-header>
    <ion-item>
      <ion-label>选项1</ion-label>
      <ion-radio value="1" checked></ion-radio>
    </ion-item>
    <ion-item>
      <ion-label>选项2</ion-label>
      <ion-radio value="2"></ion-radio>
    </ion-item>
  </ion-list>
  • 在 ion-list 标签上使用 radio-group 指令,表示其内部的 ion-radio 为同一组。
  • 借助 ion-list-header 放置这一组选项的标题。
主要属性

与 input[type=radio] 一样,有 checked、disabled和value这三个属性。

Yes or No: Toggle组件

常用于设置页面的开关组件。

基本用法
<ion-item>
    <ion-label>Pepperoni</ion-label>
    <ion-toggle [(ngModel)]="pepperoni"></ion-toggle>
  </ion-item>
image.png

主要属性

与 input[type=checkbox] 一样,有 checked、disabled和value这三个属性。

弹框选择:Select组件

在点击控件时,会弹出一个 Alert 模态框。

基本使用
<ion-list>
    <ion-item>
      <ion-label>标签</ion-label>
      <ion-select>
        <ion-option value="1">选项1</ion-option>
        <ion-option value="2">选项2</ion-option>
      </ion-select>
    </ion-item>
  </ion-list>
multiple 属性

使用 multiple 属性可将 select 变为多选,这时 select 的值会变成一个数组。

<ion-select multiple="true">
interface 属性

interface属性可以将弹框更为其它的样式,支持 action-sheet 和 popover 两个值,interface 属性不能和 multiple 属性共同使用。

action-sheet 的选择方式
popover 的选择方式

日期/时间选择:Datetime组件

基本使用
<ion-list>
    <ion-item>
      <ion-label>Date</ion-label>
      <ion-datetime displayFormat="MM/DD/YYYY"></ion-datetime>
    </ion-item>
  </ion-list>
displayFormat 属性

displayFormat 定义了日期在控件中以怎样的格式出现,对于国内开发者,常见的格式有:

YYYY 四位数年份 (2017)
MM 月份(01-12)
DD 日期 (01-31)
HH 小时-24小时制(00-23)
hh 小时-12小时制 (01-12)
mm 分钟 (00-59)
ss 秒 (00-59)

官方文档中还提供了更多的格式,可以查阅(链接在文末)。
例如,我们这样定义 displayFormat

<ion-datetime displayFormat="YYYY年MM月DD日 HH:mm"></ion-datetime>

效果是这样的


pickerFormat 属性

pickerFormat规定了日期选择器中的格式。一般情况下,我们不需要定义这一个属性,除非我们希望选择器里的格式和控件内的格式不同,例如,下面这个例子,我们要求用户选择的时间精确到秒,但是控件的显示只精确到分钟。

<ion-datetime displayFormat="HH:mm" pickerFormat="HH mm ss"></ion-datetime>

min 属性和 max 属性

min 和max 可以定义选择器的时间范围,例如下面的例子将时间限定在2016年1月1日到2016年5月30日之间:

 <ion-datetime displayFormat="YYYY-MM-DD" min="2016" max="2016-05-30"></ion-datetime>

范围选择:Range组件

Range组件允许用户通过滑块来选择一个给定范围内的值,默认的范围是0-100。

基本使用
<ion-list>
    <ion-list-header>标题</ion-list-header>
    <ion-item>
      <ion-range pin="true"></ion-range>
    </ion-item>
  </ion-list>
pin 属性

pin 属性规定用户在滑动时,是否在滑块上方显示数字。


Android中带有 pin 的 风格
min 属性和 max 属性

min 和 max 规定了选取区间,即最大值和最小值。

step 属性和 snaps 属性

step 规定了滑块的精度,默认位1,若同时使用了 snaps,则可以在滑轨上标注出每一个 step 的刻度。

<ion-list>
    <ion-list-header>标题</ion-list-header>
    <ion-item>
      <ion-range pin="true" step="5" snaps="true"></ion-range>
    </ion-item>
  </ion-list>
动图:带有 step 和 snaps 的 Range 组件

按钮

按钮和上述控件不同,它不使用 ion-button 来构件,而是使用普通的 button 标签配合 ion-button 指令来实现效果,并且按钮可以不放置在 ion-list 容器中。

基本使用
<button ion-button>按钮</button>
调整颜色

color 属性提供了集中常用的颜色,它们是内置在模板中的,默认值为 primary, 你可以根据业务需要使用其它的值,这些值可以在项目中的 varible.scss 中定制。

  <button ion-button color="primary">primary</button>
  <button ion-button color="secondary">secondary</button>
  <button ion-button color="danger">danger</button>
  <button ion-button color="dark">dark</button>
  <button ion-button color="light">light</button>
调整形状

直接在 button 标签中定义以下指令可以定义按钮的形状:

block 全宽
outline 线框按钮
clear 无背景、无边框(相当于文字按钮)
full 全宽(去除圆角)
round 大圆角
上述几个指令可以根据实际组合使用

 <button ion-button full>full</button>
  <button ion-button full>block</button>
  <button ion-button clear>clear</button>
  <button ion-button round>round</button>
  <button ion-button outline>outline</button>
  <button ion-button round outline>round+outline</button>
  <button ion-button block round>block+round</button>
  <button ion-button full outline>full+outline</button>
image.png
调整大小

large 和 small 两个属性可以定制大号和小号的按钮。

 <button ion-button large>large</button>
  <button ion-button>default</button>
  <button ion-button small>small</button>

提供的参考文档

  1. 官方文档:Label
  2. 官方文档:Input
  3. 官方文档:RadioGroup
  4. 官方文档:Toggle
  5. 官方文档:Select
  6. 官方文档:Datetime
  7. 官方文档:Range
  8. 官方文档:Button

下一章:来扯点ionic3[6] 继续上手表单:魔法般的双向数据绑定

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容