본문 바로가기
아이오닉

[하이브리드앱 ionic]시작해보기 2 - 탭메뉴 추가하기

by 알찬 퍼블리셔 2019. 6. 28.
728x90
반응형

[아이오닉] - [아이오닉] 아이오닉 시작해보기 1

 

위의 글에서 프로젝트 생성까지 진행했다. 

 

>> ionic start test-ionic tabs --type=angular 

 

>> cd test-ionic 

 

>> ionic serve 

 

아래 3개의 탭을 가진 tabs의 형태로 생성된 프로젝트를 확인할 수 있다. 

 

5개의 탭으로 코드를 수정해보자. 

 

 

일단 코드를 살펴보면 

 

 

test-ionic/src/index.html 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>Ionic App</title>

  <base href="/" />

  <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  <meta name="format-detection" content="telephone=no" />
  <meta name="msapplication-tap-highlight" content="no" />

  <link rel="icon" type="image/png" href="assets/icon/favicon.png" />

  <!-- add to homescreen for ios -->
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
</head>

<body>
  <app-root></app-root>
</body>

</html>

 

<app-root></app-root> 로 구성되어있다. 

 

test-ionic/src/app/app.component.ts

 

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html'
})

app-root 는 app.component.html 이다.

 

test-ionic/src/app/app.component.ts

<ion-app>
  <ion-router-outlet></ion-router-outlet>
</ion-app>

 

즉 현재 아래와 같은 코드라고 볼 수 있다.

<app-root>
	<ion-app>
  		<ion-router-outlet></ion-router-outlet>
	</ion-app>
</app-root> 

 

 

ion-router-outlet을 찾기위해 아래 경로의 소스를 보면 

 

 

test-ionic/src/app/app-routing.module.ts

const routes: Routes = [
  { path: '', loadChildren: './tabs/tabs.module#TabsPageModule' }
];

route가 /tabs/tabs.module의 #TabsPageModule 이라고 지정했다. 

 

 

 

test-ionic/src/app/tabs/tabs.module.ts

import { TabsPage } from './tabs.page';


export class TabsPageModule {}

 

test-ionic/src/app/tabs/tabs.page.html

<ion-tabs>

  <ion-tab-bar slot="bottom">
    <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-button tab="tab3">
      <ion-icon name="send"></ion-icon>
      <ion-label>Tab Three</ion-label>
    </ion-tab-button>
  </ion-tab-bar>

</ion-tabs>

 

 

그럼 현재 탭메뉴까지 왔다.

<app-root>
	<ion-app>
  		<ion-router-outlet>
        	<ion-tabs>

                <ion-tab-bar slot="bottom">
                  <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-button tab="tab3">
                    <ion-icon name="send"></ion-icon>
                    <ion-label>Tab Three</ion-label>
                  </ion-tab-button>
                </ion-tab-bar>

             </ion-tabs>
        </ion-router-outlet>
	</ion-app>
</app-root> 

 

test-ionic/src/app/tabs/tabs.router.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';

const routes: Routes = [
  {
    path: 'tabs',
    component: TabsPage,
    children: [
      {
        path: 'tab1',
        children: [
          {
            path: '',
            loadChildren: '../tab1/tab1.module#Tab1PageModule'
          }
        ]
      },
      {
        path: 'tab2',
        children: [
          {
            path: '',
            loadChildren: '../tab2/tab2.module#Tab2PageModule'
          }
        ]
      },
      {
        path: 'tab3',
        children: [
          {
            path: '',
            loadChildren: '../tab3/tab3.module#Tab3PageModule'
          }
        ]
      },
      {
        path: '',
        redirectTo: '/tabs/tab1',
        pathMatch: 'full'
      }
    ]
  },
  {
    path: '',
    redirectTo: '/tabs/tab1',
    pathMatch: 'full'
  }
];

@NgModule({
  imports: [
    RouterModule.forChild(routes)
  ],
  exports: [RouterModule]
})
export class TabsPageRoutingModule {}

각 tab1 tab2 tab3의 경로에 따라 loadChidren이 설정되어있다. 

경로가 '' 없으면 /tabs/tab1 으로 연결한다. 

 

 

 

 


자 그럼 탭을 추가해 보자 

test-ionic/src/app/tabs/tabs.page.html

<ion-tabs>

  <ion-tab-bar slot="bottom">
    <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-button tab="tab3">
      <ion-icon name="send"></ion-icon>
      <ion-label>Tab Three</ion-label>
    </ion-tab-button>

    <ion-tab-button tab="tab4">
      <ion-icon name="filing"></ion-icon>
      <ion-label>Tab four</ion-label>
    </ion-tab-button>

    <ion-tab-button tab="tab5">
      <ion-icon name="heart"></ion-icon>
      <ion-label>Tab five</ion-label>
    </ion-tab-button>
  </ion-tab-bar>

</ion-tabs>

 

 

https://ionicons.com/

아이콘도 넣어주고  tab4 와 tab5 를 추가 했다.

모양은 갖춰줬지만 탭이 정상적으로 작동하지 않는다. 

 

 

 

test-ionic/src/app/tabs/tabs.router.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';

const routes: Routes = [
  {
    path: 'tabs',
    component: TabsPage,
    children: [
      {
        path: 'tab1',
        children: [
          {
            path: '',
            loadChildren: '../tab1/tab1.module#Tab1PageModule'
          }
        ]
      },
      {
        path: 'tab2',
        children: [
          {
            path: '',
            loadChildren: '../tab2/tab2.module#Tab2PageModule'
          }
        ]
      },
      {
        path: 'tab3',
        children: [
          {
            path: '',
            loadChildren: '../tab3/tab3.module#Tab3PageModule'
          }
        ]
      },
      {
        path: 'tab4',
        children: [
          {
            path: '',
            loadChildren: '../tab4/tab4.module#Tab4PageModule'
          }
        ]
      },
      {
        path: 'tab5',
        children: [
          {
            path: '',
            loadChildren: '../tab5/tab5.module#Tab5PageModule'
          }
        ]
      },
      {
        path: '',
        redirectTo: '/tabs/tab1',
        pathMatch: 'full'
      }
    ]
  },
  {
    path: '',
    redirectTo: '/tabs/tab1',
    pathMatch: 'full'
  }
];

@NgModule({
  imports: [
    RouterModule.forChild(routes)
  ],
  exports: [RouterModule]
})
export class TabsPageRoutingModule {}

 

라우터에 tab4와 tab5를 추가한다. 

하지만 아직 /tab4/tab4.module#Tab4PageModule 과  /tab5/tab5.module#Tab5PageModule 는 없다! 

 

 tab3 을 복사해 tab4와 tab5를 만들어주자 . 

이름뿐만 아니라 코드 내용의 tab3도 보두 4나5로 맞추어 바꿔준다.

 

그럼 정상적으로 탭메뉴가 생성되었다! 각각의 해당 내용을 채워넣으면 원하는 모양의 프로젝트를 만들 수 있다. 

728x90
반응형

댓글