App Component는 root 컴포넌트라고도 하는데 이는 가장 처음 실행되고 다른 모든 컴포넌트를 포함하기 ��문이다.
import { Component } from '@angular/core'; //컴포넌트 import
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { TabsPage } from '../pages/tabs/tabs';
@Component({ // 컴포넌트 Decoration
templateUrl: 'app.html' // 컴포넌트 메타데이터
})
export class MyApp { // class 앞에 컴포넌트 데코레이션이 있으므로
rootPage:any = TabsPage; MyApp 클래스는 컴포넌트가 되고
export도 있으므로 MyApp은 다른 곳에서도
import 해서 쓸수 있다.
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
statusBar.styleDefault();
splashScreen.hide();
});
}
}
MyApp 컴포넌트를 시작으로해서 더 많은 컴포넌트를 추가하여 앱 내용을 표현한다.
위의 코드를 보면 @Component 메타데이터에 templateUrl만 있고 selector가 없는데 아이오닉2의 루트 컴포넌트에서는 selector 대신, ion-app을 사용한다. ion-app은 src 폴더의 index.html에 정의되어 있다.
< !-- Ionic's root component and where the app will load -->
< ion-app>
root component 는 app.component를 말한다.
루트 컴포넌트를 조금 더 자세히 들여다 보자!
@Component({
templateUrl: 'app.html'
})
컴포넌트 메타데이터로 template가 아닌 template가 정의되어 있는 templateurl이 있다. 그럼 app.html로 가보자!
< ion-nav [root]="rootPage">< /ion-nav>
<ion-nav>라는 DOM 요소(DOM Element)가 있고, [root]라는 DOM 속성(DOM Property)가 있다. [root] 속성이 어떤 페이지가 Root Page 인지를 정의해준다. Root Page는 각 화면의 가장 먼저 출력되는 페이지 이다.
import { TabsPage } from '../pages/tabs/tabs';
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage:any = TabsPage;
이 부분을 보면 TabsPage라는 변수명으로 pages/tabs 폴더에 tabs.html을 import 한다.
이와 같이 내가 설정해놓은 세개의 탭 정보가 TabsPage에 담기고, 사용자가 각 탭을 선택할때마다 각 탭이 보여줘야할 rootPage도 변하게 된다.
정리하자면 @Component Decorator로 클래스를 Component로 만든다. 앱 화면에 나타는 Page도 하나의 Component이며, 앱 실행시 가장 먼저 나타나는 페이지가 Root page 이다. Root Page는 app.components.ts에서 컴포넌트 메타데이터를 통해 ion-nav Dom 요소의 [root] 속성에 정의해 준다.