이 가이드는 @angular/cli
의 시작 패키지를 기준으로 작성되었습니다.
아래 가이드의 완성본은 시작 패키지 문서에서 확인할 수 있습니다.
사전 설정
CLI 설치
npm install -g @angular/cli
프로젝트 생성
ng new <project_dir>
패키지 설치
cd <project_dir>yarn add @ibsheet/loader# using npm# npm i -S @ibsheet/loader
IBSheet 라이브러리
만약 서버 URL을 사용한다면 이 단계는 생략합니다.
프로젝트 폴더의 assets
폴더에 ibsheet
라이브러리를 복사합니다.
├── assets/| └── ibsheet/| ├── css/| ├── locale/| ├── fonts/| ├── ibsheet.js| └── ibleaders.js
개발서버 실행
yarn start# using npm# npm start
메인 컴포넌트
메인 컴포넌트 혹은 모듈에서 사용할 라이브러리들을 설정(등록)합니다.
app.component.ts
src/app.component.ts
import { Component } from '@angular/core'import loader from '@ibsheet/loader'const ibsheetLib = {name: 'ibsheet',baseUrl: 'assets/ibsheet'}loader.config({registry: [ibsheetLib]})@Component({selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css']})export class AppComponent {loaderVersion = loader.version}
app.component.html
src/app.component.html
<p>@ibsheet/loader v{{ loaderVersion }}</p><h2>Go to Pages: </h2><ul><li><a routerLink="/" routerLinkActive="active">Home</a></li><li><a routerLink="/page1" routerLinkActive="active">Page1</a></li><li><a routerLink="/page2" routerLinkActive="active">Page2</a></li></ul><div class="main"><router-outlet></router-outlet><!-- Routed components go here --></div>
샘플 공유 데이터
각 컴포넌트에서 사용할 공용 샘플 데이터 파일을 만듭니다.
서브 컴포넌트
src/home
src/page1
src/page2
cd srcng generate component homeng generate component page1ng generate component page2
Home
홈 화면에서는 ibsheet
라이브러리를 로드하지 않습니다. 만약 로드되어 있다면 컴포넌트 마운트시 unload
합니다.
src/home/home.component.html
<div style="text-align:center"><h1>{{ title }}!</h1></div>
src/home/home.component.ts
import { Component, OnInit } from '@angular/core'import loader from '@ibsheet/loader'@Component({selector: 'app-home',templateUrl: './home.component.html',styleUrls: ['./home.component.css']})export class HomeComponent implements OnInit {title = 'IBSheetLoader for Angular'ngOnInit() {loader.unload()}}
Page1
컴포넌트 마운트시 첫 번째 샘플 데이터로 시트를 생성합니다. 컴포넌트가 제거될 때, 해당 테이블도 제거합니다.
src/page1/page1.component.html
<p>page1 works!</p><div id="sheetContainer"></div>
src/page1/page1.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core'import loader from '@ibsheet/loader'import { SheetSampleData } from '../shared/ibsheet-data'@Component({selector: 'app-page1',templateUrl: './page1.component.html',styleUrls: ['./page1.component.css']})export class Page1Component implements OnInit, OnDestroy {sheetId = '';ngOnInit() {const A = this;const { options, data } = SheetSampleData[0]loader.createSheet({el: 'sheetContainer',options,data}).then((sheet: { id: any; }) => {// 주의: 해당 구간에서 데이터 조회를 하면 안됩니다. 데이터 조회는 onRenderFirstFinish 이벤트에서 실행해야합니다.A.sheetId = sheet.id;console.log('created sheet', sheet.id);})}ngOnDestroy() {loader.removeSheet(this.sheetId)}}
Page2
두 번째 샘플 데이터로 시트를 생성합니다. 컴포넌트가 제거될 때, 해당 테이블도 제거합니다.
src/page2/page2.component.html
<p>page2 works!</p><div id="sheetContainer"></div>
src/page2/page2.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core'import loader from '@ibsheet/loader'import { SheetSampleData } from '../shared/ibsheet-data'@Component({selector: 'app-page2',templateUrl: './page2.component.html',styleUrls: ['./page2.component.css']})export class Page2Component implements OnInit, OnDestroy {sheetId = ''ngOnInit() {const A = this;const { options, data } = SheetSampleData[1]loader.createSheet({el: 'sheetContainer',options,data}).then((sheet: { id: any; }) => {// 주의: 해당 구간에서 데이터 조회를 하면 안됩니다. 데이터 조회는 onRenderFirstFinish 이벤트에서 실행해야합니다.A.sheetId = sheet.id;console.log('created sheet', sheet.id);})}ngOnDestroy() {loader.removeSheet(this.sheetId)}}
라우터 설정하기
이상 만들었던 서브 컴포넌트들을 해당 모듈의 라우터 구성에 추가합니다.
app.module.ts
src/app.module.ts
import { BrowserModule } from '@angular/platform-browser'import { NgModule } from '@angular/core'import { RouterModule, Routes } from '@angular/router'import { AppComponent } from './app.component'import { Page1Component } from './page1/page1.component'import { Page2Component } from './page2/page2.component'import { HomeComponent } from './home/home.component'const appRoutes: Routes = [{ path: '', component: HomeComponent },{ path: 'page1', component: Page1Component },{ path: 'page2', component: Page2Component },]@NgModule({declarations: [AppComponent],imports: [BrowserModule,RouterModule.forRoot(appRoutes)],providers: [],bootstrap: [AppComponent]})export class AppModule { }
Package.json
"dependencies": {"@ibsheet/loader": "^1.1.22","@angular/animations": "^16.2.0","@angular/common": "^16.2.0","@angular/compiler": "^16.2.0","@angular/core": "^16.2.0","@angular/forms": "^16.2.0","@angular/platform-browser": "^16.2.0","@angular/platform-browser-dynamic": "^16.2.0","@angular/router": "^16.2.0",},
시작 패키지
위의 가이드 내용을 바탕으로 구성한 소스코드 저장소를 다음 페이지에서 확인할 수 있습니다.