ionic4.x 学习笔记(二)—— Ionic4.x 中的 UI 组件

目录

1.Ionic4.x 内置颜色

2.Ionic4.x 中的按钮

3.Ionic4.x 中的图标 

4.Ionic4.x 中的常见组件

5.Ionic4.x 中的列表

6.Ionic4.x 中的表单

7.Ionic4.x 中的 Slides 轮播图

8.Ionic4.x 中的 Searchbar 搜索组件、Segment tab 切换组件

9.Ionic4.x 中的日期组件

10.Ionic4.x 中的侧边栏组件结合底部 tabs

11.Ionic4.x 中的 Theming(主题)


1.Ionic4.x 内置颜色

  • primary secondary tertiary success warning danger dark medium light
  • <ion-button color="primary"> primary </ion-button>
    <ion-button color="secondary"> secondary </ion-button>

2.Ionic4.x 中的按钮 <ion-button>

  • 按钮自定义颜色:<ion-button color="primary"> primary </ion-button>
  • 默认按钮是 内联块,但设置 expand 属性(设置宽度),按钮会变为 块元素
  1. <ion-button color="primary" expand="block"> button </ion-button>
  2. <ion-button color="primary" expand="full"> button </ion-button>
  • fill 属性(设置背景及边框色,默认按钮有固定背景,除非按钮位于工具栏内部(透明背景)
  1. clear:透明背景按钮
  2. outline:透明背景 + 边框可见按钮
  3. solid:有填充色的按钮
  • size(设置按钮的大小):small(小按钮)、default(默认按钮)、large(大按钮)

  • mode(使用哪种平台样式)
  1. <ion-button mode='ios' color="primary"> ios 平台的按钮</ion-button>
  2. <ion-button mode='md' color="primary">android 平台的按钮</ion-button>
  • 带图标的按钮:<ion-button> +  <ion-icon>

3.Ionic4.x 中的图标 <ion-icon>

  • name 指定图标名称
  • slot 指定图标位置:icon-only(按钮内容仅有图标没有文字)、start、end
  • <ion-button fill="clear/outline/full" color="success">
        <ion-icon slot="icon-only/start/end" name="add"></ion-icon>
    </ion-button
<ion-header>
  <ion-toolbar>
    <ion-buttons slot="start">
      <ion-back-button defaultHref="/tabs/tab1" text="返回"></ion-back-button> 
    </ion-buttons>
    <ion-title>按钮组件演示</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content padding>
    <ion-button color="dark"> 通过color属性修改按钮的颜色 </ion-button>
    <ion-button color="primary" expand="block"> expand 设置按钮的宽度    </ion-button>
    <ion-button color="primary" expand="full"> expand 设置按钮的宽度    </ion-button>
    <ion-button fill="outline" expand="block"> fill 设置背景填充 </ion-button>

   <ion-button> <ion-icon slot="icon-only" name="add"></ion-icon> </ion-button>
   <ion-button fill="clear"> <ion-icon slot="icon-only" name="add"></ion-icon></ion-button>
  <ion-icon name="add"></ion-icon>

  <ion-button  size="large"> size 设置按钮的大小 </ion-button>
  <ion-button  size="small"> size 设置按钮的大小 </ion-button>

  <ion-button mode='ios' color="primary"> ios 平台的按钮 </ion-button>    
  <ion-button mode='md' color="primary"> android 平台的按钮 </ion-button>

   <ion-button color="primary" href="">
     <ion-icon name="add-circle-outline" slot="start"></ion-icon>
     图片在左侧文字在右侧按钮
   </ion-button>

   <ion-button color="primary" href=""> 
     图片在右侧文字在左侧的按钮
     <ion-icon name="add-circle-outline" slot="end"></ion-icon>
   </ion-button>

   <ion-button color="primary" href="">      
      <ion-icon name="add" slot="start"></ion-icon> 增加
    </ion-button>
    <ion-icon name="settings" color="success" class="myicon"></ion-icon>

    <ion-button  fill="clear">
       <ion-icon name="checkbox-outline" slot="icon-only"></ion-icon>
    </ion-button>
</ion-content>

4.Ionic4.x 中的常见组件

  1. ion-header 头部、ion-content 内容、ion-footer 底部
  2. ion-toolbar 用于头部和底部,固定导航栏
  3. ion-title 放在ion-toolbar 导航名称
  4. ion-buttons 按钮组,用在 ion-toolbar 工具栏中
  5. ion-back-button 返回按钮,放在 ion-buttons 里面​​​​​
  • 返回按钮返回指定地址 defaultHref:<ion-back-button defaultHref="/tabs/tab1" text="返回"></ion-back-button>
  • ion-buttons 按钮组里的属性:
  1. secondary:元素在 ios 模式下位于内容左侧,在 md 模式下位于内容右侧
  2. primary:元素在 ios 模式下位于内容右侧,在 md 模式下位于最右
  3. start:元素在 LTR 中位于内容左侧,在 RTL 中位于内容右侧
  4. end:元素在 LTR 中位于内容右侧,在 RTL 中位于内容左侧

5.Ionic4.x 中的列表

<ion-list lines="full">
    <ion-item *ngFor="let item of list" [routerLink]="['/button']">
      <ion-label>{{item}}</ion-label>
    </ion-item>
  </ion-list>

5.1 普通列表 <ion-list> + <ion-item><ion-label>

<ion-list>
    <ion-item>
        <ion-label>Peperoni</ion-label>
    </ion-item>
</ion-list>
  • 普通列表加上路由跳转,列表将会自动加上箭头:

5.2 分组列表 <ion-list> + <ion-item-divider> + <ion-item><ion-label>

<ion-list>
    <ion-item-divider>
        <ion-label>
            Section A
        </ion-label>
    </ion-item-divider>
    <ion-item><ion-label>A1</ion-label></ion-item>
    <ion-item><ion-label>A2</ion-label></ion-item>
    <ion-item><ion-label>A3</ion-label></ion-item>

5.3 列表中的图标 <ion-list> + <ion-item> + <ion-icon> + <ion-label>

<ion-list>
<ion-item>
    <ion-icon slot="start" name="people"></ion-icon>
    <ion-label>个人中心</ion-label>
    <ion-icon slot="end" name="arrow-forward"></ion-icon>
</ion-item>
</ion-list>

5.4 列表中的头像 <ion-avatar><img>

<ion-list>
  <ion-item>
    <ion-avatar>
      <img src="assets/01.png">
    </ion-avatar>
    <ion-label>沃尔玛无人收银系统</ion-label>
  </ion-item>
</ion-list>

5.5 列表中的图片 <ion-thumbnail><img>

<ion-list>
  <ion-item>
    <ion-thumbnail slot="start">
      <img src="https://gravatar.com/avatar......">
    </ion-thumbnail>
    <ion-label>Peperoni</ion-label>
  </ion-item>
</ion-list>

5.6 滑动列表 <ion-item-sliding> <ion-item-options>

<ion-list>
  <ion-item-sliding>
    <ion-item>
      <ion-label>Item1</ion-label>
    </ion-item>
    <ion-item-options side="start">
      <ion-item-option (click)="favorite(item)">Favorite</ion-item-option>
      <ion-item-option color="primary" (click)="share(item)">Share</ion-item-option>
    </ion-item-options>
    <ion-item-options side="end">
      <ion-item-option (click)="unread(item)">Unread</ion-item-option>
    </ion-item-options>
  </ion-item-sliding>
</ion-list>
  • 补充:<ion-item> 的属性 —— https://ionicframework.com/docs/api/item
  • <ion-list> 上的 lines=“full” 下划线顶格显示
<ion-list lines="full">
    <ion-item *ngFor="let item of list" [routerLink]="['/button']">
      <ion-label>{{item}}</ion-label>
    </ion-item>
  </ion-list>

 

6.Ionic4.x 中的表单

  1. 输入框 input,<ion-item> 包裹一个 <ion-label> 和一个 <ion-input>
  2. 单选框 radio,<ion-radio-group> 上绑定数据,包裹多个 <ion-item>,<ion-item> 再包裹 <ion-label> 和 <ion-radio>
  3. 复选框 checkbox,遍历数组,<ion-item> 包裹 <ion-label> 和 <ion-checkbox>,在 <ion-checkbox> 上绑定数据
  4. 下拉框 seletct, <ion-select> 包裹一个 <ion-select-option>
  5. <ion-textarea> 简化版输入框

6.1 ion-input 单行文本框

<ion-list>
    <ion-item>
        <ion-label>用户名:</ion-label>
        <ion-input [(ngModel)]="peopleInfo.username"></ion-input>
    </ion-item>
</ion-list>

6.2 ion-toggle 开关 

<ion-item>
    <ion-label>是否吃早餐</ion-label>
    <ion-toggle slot="end" [(ngModel)]="peopleInfo.falg"></ion-toggle>
</ion-item>

 6.3 ion-radio-group、ion-radio 单选按钮组

<ion-list>
    <ion-radio-group [(ngModel)]="peopleInfo.payType">
        <ion-item>
            <ion-avatar slot="start">
                <img src="assets/alipay.png">
            </ion-avatar>
            <ion-label>支付宝</ion-label>
            <ion-radio value='1' slot="end"></ion-radio>
        </ion-item>
        <ion-item>
            <ion-avatar slot="start">
                <img src="assets/weixinpay.png">
            </ion-avatar>
            <ion-label>微信</ion-label>
            <ion-radio value='2' slot="end"></ion-radio>
        </ion-item>
    </ion-radio-group>
</ion-list>

6.4 ion-checkbox 多选按钮组

<ion-list>
    <ion-item *ngFor="let item of peopleInfo.checkBoxList">
        <ion-label>{{item.val}}</ion-label>
        <ion-checkbox slot="start" [(ngModel)]="item.isChecked"></ion-checkbox>
    </ion-item>
</ion-list>

6.5 ion-select 选择框

<ion-list>
    <ion-select slot="end" [(ngModel)]="peopleInfo.city">
        <ion-select-option *ngFor="let item of peopleInfo.cityList" [value]="item">{{item}}</ion-select-option>
    </ion-select>
</ion-list>

6.6 ion-textarea 多行文本框

<ion-list>
    <ion-item>
        <ion-textarea [(ngModel)]="peopleInfo.info"></ion-textarea>
    </ion-item>
</ion-list>

 

7.Ionic4.x 中的 Slides 轮播图

  • Ionic4.x 中的轮播图组件是基于swiper 插件,所以配置 slides 属性需要在 swiper 的 api 中找
  • Swiper Api:http://idangero.us/swiper/api/

7.1 配置slides 的属性

export class SlidesPage implements OnInit {
    slideOpts = {
        effect: 'flip',
        speed: 400,
        loop:true,
        autoplay: {
            delay: 2000
       }};
}

7.2 <ion-slide> 实现轮播图

<ion-slides pager="true" [options]="slideOpts">
    <ion-slide>
        <h1>Slide 1 </h1>
    </ion-slide>
    // ...
    <ion-slide>
        <h1>Slide 10 </h1>
    </ion-slide>
</ion-slides>

7.3 调用方法实现轮播

  • 获取 slide 对象:
  1. 定义名称 #slide:<ion-slides pager="true" #slide>......
  2. 引入ViewChild,获取 slide 对象:
  • import { Component, OnInit, ViewChild } from '@angular/core';
  • @ViewChild('slide') slide;
  • 触发事件,调用 slide 的方法:doSlide() { this.slide.slideNext(); }

7.4 ionSlideTouchEnd 事件

  • 手动滑动后,轮播图不自动轮播的解决方法:添加 ionSlideTouchEnd 事件
  • <ion-slides pager="true" [options]="slideOpts" #slide1 (ionSlideTouchEnd) = "slideDidChange()"> ......
  • slideDidChange() { this.slide1.startAutoplay(); }

8.Ionic4.x 中的 Searchbar 搜索组件、Segment tab 切换组件

8.1 Searchbar 搜索组件:用于搜索框

<ion-searchbar placeholder="Filter Schedules"></ion-searchbar>
<ion-searchbar placeholder="Filter" animated showCancelButton cancelButtonText="取消"></ion-searchbar>
<ion-searchbar placeholder="Filter" animated></ion-searchbar>
<ion-searchbar placeholder="Filter" animated color="primary"></ion-searchbar>
<ion-searchbar debounce="500" (ionChange)="searchBarChange()"></ion-searchbar>

8.2 Segment 自定义tab 切换组件:用于 tab 切换

  • https://ionicframework.com/docs/api/segment
  • 注意:ngSwichCase的写法,带引号,把tabs绑定到[ngSwitch]上
<ion-segment [(ngModel)]="tabs" (ionChange)="segmentChanged($event)">
    <ion-segment-button value="plist">
        商品列表
    </ion-segment-button>
    <ion-segment-button value="pcontent">
        商品详情
    </ion-segment-button>
</ion-segment>
<div [ngSwitch]="tabs">
    <div class="con1" *ngSwitchCase="'plist'">
        商品图文信息
    </div>
    <div class="con2" *ngSwitchCase="'pcontent'">
        商品详情
    </div>
</div>

9.Ionic4.x 中的日期组件

  • 注意,去掉案例上的 return false,否则时间控件不取消显示
// 组件基本使用模板:
<ion-datetime display-format="YYYY-MM-DD" [(ngModel)]="day"></ion-datetime>
<ion-datetime display-format="MM/YYYY" picker-format="MMMM YYYY"></ion-datetime>
// 组件基本使用业务逻辑:
import sd from 'silly-datetime';
constructor() {
	this.day = sd.format(new Date(), 'YYYY-MM-DD');
}
——————————————————————————————————————————————————————————————————————————————————
// 自定义组件的 options 模板:
<ion-datetime display-format="YYYY-MM-DD" [pickerOptions]="customPickerOptions" ></ion-datetime>
// 自定义组件的 options 业务逻辑:
public customPickerOptions = {
        buttons: [{
            text: '取消',
            handler: () => console.log('Clicked Save!')
        }, {
            text: '保存',
            handler: () => {
                console.log('Clicked Log. Do not Dismiss.');
            }}]
}

10.Ionic4.x 中的侧边栏组件结合底部 tabs

10.1 侧边栏 <ion-menu> 组件的基本使用

  • 创建项目:ionic start myApp sidemenu
  • 配置:
  • 属性作用可选值
    side配置侧边栏的位置start end
    menuId侧边栏的唯一标识 
    type配置侧边栏的弹出方式overlay, reveal, push
    swipe-gesture滑动弹出侧边栏true false
<ion-menu side="start" menuId="first">
    <ion-header>
        <ion-toolbar color="primary">
            <ion-title>Start Menu</ion-title>
        </ion-toolbar>
    </ion-header>
    <ion-content>
        <ion-list>
            <ion-menu-toggle auto-hide="false">
                <ion-item [routerDirection]="'root'" [routerLink]="['/button']"> 这是一个列表</ion-item>
            </ion-menu-toggle>
            <ion-menu-toggle auto-hide="false">
                <ion-item [routerDirection]="'root'" [routerLink]="['/button']"> 这是一个列表</ion-item>
            </ion-menu-toggle>
        </ion-list>
    </ion-content>
</ion-menu>
<ion-router-outlet main></ion-router-outlet>

10.2 侧边栏 <ion-menu> 组件的事件和方法

  • 用 js 控制侧边栏步骤:
  1. 给 <ion-menu> 定义 menuId 属性:<ion-menu side="start" menuId="first"></ion-menu>
  2. 控制菜单的页面中引入代码:import { MenuController } from '@ionic/angular';
  3. 初始化构造函数:constructor( private menu: MenuController) { }
  4. 对应方法中,通过 js 控制侧边栏:doOpenMenu() { this.menu.open('first'); }

10.3 侧边栏 <ion-menu> 组件的一些小点

  • <ion-menu-toggle>:点击后,侧边栏消失
  • <ion-menu-button>:<ion-menu-button menu="end1" 中的 menu,对应 app 上定义的 menuId
<ion-header>
  <ion-toolbar>
    <ion-buttons slot="start">
      <ion-menu-button> </ion-menu-button>
    </ion-buttons>
    <ion-title>
      Home
    </ion-title>

    <ion-buttons slot="end">
      <ion-menu-button menu="end1"></ion-menu-button>
    </ion-buttons>
  </ion-toolbar>
</ion-header>

10.4 侧边栏 <ion-menu> 组件结合底部 tabs

  • app.component.html 中加入下面代码:
<ion-app>
    <ion-menu swipe-gesture=true type="overlay" menuId="first" >
        <ion-header>
            <ion-toolbar>
                <ion-title>菜单</ion-title>
            </ion-toolbar>
        </ion-header>
        <ion-content>
            <ion-list>
                <ion-menu-toggle auto-hide="false">
                    // 默认侧边栏点击链接是内容区从右到左显示
                    // 加上[routerDirection]="‘root’" ,直接显示,没有动画了
                    <ion-item [routerDirection]="'root'" [routerLink]="['/button']"> 这是一个列表</ion-item>
                </ion-menu-toggle>
            </ion-list>
        </ion-content>
    </ion-menu>
    // 拉不出来侧边栏,在app.moudle.ts上加个main:
    <ion-router-outlet main></ion-router-outlet>
</ion-app>
  • 注意:
  • 拉不出来侧边栏,在 app.moudle.ts 上加个 main:<ion-router-outlet main></ion-router-outlet>
  • 默认侧边栏点击链接,内容区从右到左显示,加上 [routerDirection]="‘root’" ,直接显示,没有动画了
  • <ion-menu-toggle>
      <ion-item [routerDirection]="'root'"  [routerLink]="['/news']">
        <ion-label>我的新闻</ion-label>
      </ion-item>
    </ion-menu-toggle>

11.Ionic4.x 中的 Theming(主题)

  • Ionic4.x 中修改主题颜色:需要在 src/theme/variables.scss 中修改
  • 其他的修改也是:主要对 variable.scss 的修改,或在自己组件的样式中,微调某个页面元素
  • contrast 对比色:比如底部 tabs 的颜色是 #69bb7b,则里面按钮的颜色是 #fff

11.1 增加内置主题颜色

  • Ionic4.x 增加内置主题颜色:找到 src/theme/variables.scss,新增 favorite 颜色,设置如下:
.ion-color-favorite {
    --ion-color-base: #69bb7b;
    --ion-color-base-rgb: 105,187,123;
    --ion-color-contrast: #ffffff;
    --ion-color-contrast-rgb: 255,255,255;
    --ion-color-shade: #5ca56c;
    --ion-color-tint: #78c288;
}
  • 用法:<ion-button color="favorite"> 自定义颜色 </ion-button>

11.2 修改内置组件默认样式

  • 官方文档:https://ionicframework.com/docs/api/button
  • ionic4.x 组件中,有 CSS Custom Properties,可以通过它来修改 ionic4.x 内置组件的默认样式
  • 找到 src/theme/variables.scss,修改 ion-button 的默认样式:
ion-button {
    --color: #222;
    --background:red;
}

11.3 修改底部 Tabs 背景及按钮颜色

<ion-tabs>
    <ion-tab-bar slot="bottom" color="favorite">
        <ion-tab-button tab="tab1">
            <ion-icon name="flash"></ion-icon>
            <ion-label>Tab One</ion-label>
        </ion-tab-button>
        <ion-tab-button tab="tab2">
            <ion-icon name="apps"></ion-icon>
            <ion-label>Tab Two</ion-label>
        </ion-tab-button>
    </ion-tab-bar>
</ion-tabs>
——————————————————————————————————————————————————————————————————
.ion-color-favorite {
  --ion-color-base: #69bb7b; // 背景颜色
  --ion-color-base-rgb: 105,187,123;
  --ion-color-contrast: #ffffff;// c参照颜色,就是不选中的时候的颜色
  --ion-color-contrast-rgb: 255,255,255;
  --ion-color-shade: #5ca56c;
  --ion-color-tint: #78c288;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值