Time: 08:55
Event: Entering the lab
Time: 15:27
The upper part for title and profile picture now no longer scrollable so when the content was overflowed the upper part will not get scrolled instead stay still.
Using ion-header
for upper part and ion-content
for body part, ion-header
has its own pre-defined library which make the upper part stay still on the above.
In home.page.html
ββββ<ion-app>
ββββ <ion-header padding>
ββββ <ion-item class="ion-item--no-background title" lines="none">
ββββ <ion-label>{{fragmentTitle}}</ion-label>
ββββ <ion-avatar slot="end">
ββββ <img src="https://gravatar.com/avatar/dba6bae8c566f9d4041fb9cd9ada7741?d=identicon&f=y">
ββββ </ion-avatar>
ββββ </ion-item>
ββββ </ion-header>
ββββ <ion-content padding scroll-y="false">
ββββ <ion-slides [options]="slideOpts" #slides (ionSlideDidChange)="slideChanges()">
ββββ <!-- DONE SLIDE -->
ββββ <ion-slide>
ββββ <ion-content>
ββββ <ion-list class="ion-list--no-background" *ngFor="let missionDay of doneMissionList">
ββββ <ion-item class="ion-item--no-background" lines="none">
ββββ <ion-label>
ββββ <h2 class="subtitle">{{missionDay.DayString.toUpperCase()}}</h2>
ββββ <span class="subtitle--date">{{missionDay.DateString.toUpperCase()}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ <ion-card class="card-done" *ngFor="let missionItem of missionDay.Data">
ββββ <ion-item lines="none">
ββββ <ion-label class="card--title">
ββββ <span>{{missionItem.ClientName}}</span>
ββββ </ion-label>
ββββ <ion-label class="card--title-time">
ββββ <span>{{missionItem.MissionTimeOnlyHour}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ <ion-item lines="none">
ββββ <ion-label class="card--address">
ββββ <span>{{missionItem.ClientAddress}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ </ion-card>
ββββ </ion-list>
ββββ <br>
ββββ </ion-content>
ββββ </ion-slide>
ββββ <!-- TODAY SLIDE -->
ββββ <ion-slide>
ββββ <ion-content>
ββββ <ion-list class="ion-list--no-background">
ββββ <ion-item class="ion-item--no-background" lines="none">
ββββ <ion-label>
ββββ <h2 class="subtitle">TODAY</h2>
ββββ <span class="subtitle--date">{{todayMissionList.Date}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ <ion-card class="card-today" (click)="openDetail(item.MissionNumber)" tappable *ngFor="let item of todayMissionList.Data">
ββββ <ion-item lines="none">
ββββ <ion-label class="card--title">
ββββ <span>{{item.ClientName}}</span>
ββββ </ion-label>
ββββ <ion-label class="card--title-time">
ββββ <span>{{item.MissionTimeOnlyHour}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ <ion-item lines="none">
ββββ <ion-label class="card--address">
ββββ <span>{{item.ClientAddress}}</span>
ββββ </ion-label>
ββββ </ion-item>
ββββ </ion-card>
ββββ </ion-list>
ββββ </ion-content>
ββββ </ion-slide>
ββββ </ion-slides>
ββββ </ion-content>
ββββ</ion-app>
ion-header
which it contains the title on ion-label
with value {{fragmentTitle}}
.{{fragmentTitle}}
, is a variable in back end code that content string value of title and can be changes when the fragment being changed, example from Today Mission to Future Mission and vice versa.ion-avatar
, into header so these will be the upper part which cannot be scroll when the body overflowed.To accompany the front end design, in home.page.scss
ββββ:root {
ββββ --ion-safe-area-top: 20px;
ββββ --ion-safe-area-bottom: 22px;
ββββ}
ββββion-header {
ββββ background-color: #ededed;
ββββ height: auto;
ββββ padding-bottom: 0px;
ββββ}
ββββ.header-md:after {
ββββ width: 0%;
ββββ}
ββββion-content {
ββββ --background: #ededed;
ββββ height: 85%;
ββββ padding-top: 0px;
ββββ}
ββββ.swiper-slide {
ββββ display: block;
ββββ}
ββββion-slide>h2 {
ββββ margin-top: 2.8rem;
ββββ}
ββββion-slide {
ββββ height: 100vh;
ββββ flex-direction: column;
ββββ}
ββββion-card.card-future {
ββββ border-left: 5px solid #259ed6;
ββββ}
ββββion-card.card-today {
ββββ border-left: 5px solid #259ed6;
ββββ cursor: pointer;
ββββ}
ββββion-card.card-done {
ββββ border-left: 5px solid #69d392;
ββββ}
ββββ.ion-list--no-background {
ββββ background: var(
ββββ --ion-item-background,
ββββ var(--ion-background-color, rgba (0,0,0,0))
ββββ );
ββββ}
ββββ.ion-item--no-background {
ββββ --background: rgba(0, 0, 0, 0);
ββββ}
ββββ.title {
ββββ font-size: 24px;
ββββ font-weight: bold;
ββββ padding-left: 0px;
ββββ}
ββββ.subtitle {
ββββ font-weight: bold;
ββββ font-size: 16px
ββββ}
ββββ.subtitle--date {
ββββ font-size: 14px;
ββββ color: rgba($color: #000000, $alpha: 0.75);
ββββ}
ββββ.card--title {
ββββ margin-bottom: -5px;
ββββ font-size: 18px;
ββββ font-weight: bold;
ββββ}
ββββ.card--title-time {
ββββ margin-bottom: -5px;
ββββ text-align: right;
ββββ font-size: 18px;
ββββ font-weight: bold;
ββββ}
ββββ.card--address {
ββββ margin-top: -5px;
ββββ font-size: 16px;
ββββ color: rgba($color: #000000, $alpha: 0.75);
ββββ}
ion-header
and .header-md:after
class, both of these affect the ion-header
design in HTML.For the main part, in home.page.ts
ββββimport { ViewChild } from '@angular/core';
ββββimport { IonSlides } from '@ionic/angular';
ββββexport class HomePage {
ββββ futureMissionList = [];
ββββ fragmentTitle: string;
ββββ fragmentTitleArray = ["What I've Done", "Today's Mission", "Future"];
ββββ ngOnInit() {
ββββ this.fragmentTitle = this.fragmentTitleArray[1];
ββββ this.setDataFuture();
ββββ }
ββββ async setDataFuture () {
ββββ // initialize
ββββ let data = [ ... ];
ββββ this.futureMissionList = data;
ββββ }
ββββ }
ββββ}
ββββ[
ββββ {
ββββ 'DateString': "August 1",
ββββ 'DayString': "Thursday",
ββββ 'Date': "...",
ββββ 'Data': [
ββββ {
ββββ 'ClientName': "Client No. 001",
ββββ 'ClientAddress': "Taipei, Keelung Rd. No. 01",
ββββ 'MissionTime': "2019-07-01 12:00:00",
ββββ 'MissionTimeOnlyHour': "12:00",
ββββ 'ClientPhone': "+886 123 345 901",
ββββ 'ClientContactPerson': "Mr. 010",
ββββ 'MachineType': "UN-1321AG-1-L",
ββββ 'MachineNumber': "456701",
ββββ 'ErrorCode': "1",
ββββ 'ProblemOccured': "Your Lie in April 1st",
ββββ 'NotificationTime': "2019-30-29 11:41:00",
ββββ 'Repairman': "198503302003121001",
ββββ 'ClientNumber': "132401",
ββββ 'MissionNumber': "051"
ββββ },
ββββ {
ββββ 'ClientName': "Client No. 002",
ββββ 'ClientAddress': "Taipei, Keelung Rd. No. 02",
ββββ 'MissionTime': "2019-07-01 18:00:00",
ββββ 'MissionTimeOnlyHour': "18:00",
ββββ 'ClientPhone': "+886 123 345 902",
ββββ 'ClientContactPerson': "Mr. 020",
ββββ 'MachineType': "UN-1321AG-1-L",
ββββ 'MachineNumber': "456701",
ββββ 'ErrorCode': "1",
ββββ 'ProblemOccured': "Your Lie in April 1st",
ββββ 'NotificationTime': "2019-30-29 11:41:00",
ββββ 'Repairman': "198503302003121001",
ββββ 'ClientNumber': "132402",
ββββ 'MissionNumber': "052"
ββββ }
ββββ ]
ββββ },
ββββ {
ββββ 'DateString': "August 3",
ββββ 'DayString': "Saturday",
ββββ 'Date': "...",
ββββ 'Data': [
ββββ {
ββββ 'ClientName': "Client No. 003",
ββββ 'ClientAddress': "Taipei, Keelung Rd. No. 03",
ββββ 'MissionTime': "2019-07-01 15:00:00",
ββββ 'MissionTimeOnlyHour': "15:00",
ββββ 'ClientPhone': "+886 123 345 903",
ββββ 'ClientContactPerson': "Mr. 030",
ββββ 'MachineType': "UN-1321AG-1-L",
ββββ 'MachineNumber': "456701",
ββββ 'ErrorCode': "1",
ββββ 'ProblemOccured': "Your Lie in April 1st",
ββββ 'NotificationTime': "2019-30-29 11:41:00",
ββββ 'Repairman': "198503302003121001",
ββββ 'ClientNumber': "132403",
ββββ 'MissionNumber': "053"
ββββ }
ββββ ]
ββββ },
ββββ {
ββββ 'DateString': "August 4",
ββββ 'DayString': "Sunday",
ββββ 'Date': "...",
ββββ 'Data': [
ββββ {
ββββ 'ClientName': "Client No. 004",
ββββ 'ClientAddress': "Taipei, Keelung Rd. No. 04",
ββββ 'MissionTime': "2019-07-01 12:00:00",
ββββ 'MissionTimeOnlyHour': "12:00",
ββββ 'ClientPhone': "+886 123 345 904",
ββββ 'ClientContactPerson': "Mr. 040",
ββββ 'MachineType': "UN-1321AG-1-L",
ββββ 'MachineNumber': "456701",
ββββ 'ErrorCode': "1",
ββββ 'ProblemOccured': "Your Lie in April 1st",
ββββ 'NotificationTime': "2019-30-29 11:41:00",
ββββ 'Repairman': "198503302003121001",
ββββ 'ClientNumber': "132404",
ββββ 'MissionNumber': "054"
ββββ },
ββββ {
ββββ 'ClientName': "Client No. 005",
ββββ 'ClientAddress': "Taipei, Keelung Rd. No. 05",
ββββ 'MissionTime': "2019-07-01 10:00:00",
ββββ 'MissionTimeOnlyHour': "10:00",
ββββ 'ClientPhone': "+886 123 345 905",
ββββ 'ClientContactPerson': "Mr. 050",
ββββ 'MachineType': "UN-1321AG-1-L",
ββββ 'MachineNumber': "456701",
ββββ 'ErrorCode': "1",
ββββ 'ProblemOccured': "Your Lie in April 1st",
ββββ 'NotificationTime': "2019-30-29 11:41:00",
ββββ 'Repairman': "198503302003121001",
ββββ 'ClientNumber': "132405",
ββββ 'MissionNumber': "055"
ββββ }
ββββ ]
ββββ }
ββββ]
The result in Home page for Future Mission:
Time: 18:00
Event: Leaving the lab
on-intern