이번에는 영웅들의 리스트를 보여주고, 사용자가 영웅을 선택하여 상세내역을 확인할 수 있도록 만들어 볼 것입니다.
코드는 다음과 같습니다. ( https://embed.plnkr.co/?show=preview )
파일 디렉토리
package.json
heroes 보여주기
프로젝트를 만들기 영웅들의 리스트를 보여주기 위해서는 view template를 추가하자.
Mock data로 사용할 10개의 heroes를 만들자.
src/app/app.component.ts (hero array)
- const HEROES: Hero[] = [
- { id: 11, name: 'Mr. Nice' },
- { id: 12, name: 'Narco' },
- { id: 13, name: 'Bombasto' },
- { id: 14, name: 'Celeritas' },
- { id: 15, name: 'Magneta' },
- { id: 16, name: 'RubberMan' },
- { id: 17, name: 'Dynama' },
- { id: 18, name: 'Dr IQ' },
- { id: 19, name: 'Magma' },
- { id: 20, name: 'Tornado' }
- ];
HEROES 배열은 Hero 배열타입이다. 드디어 web service로부터 영웅들의 리스트를 받을 수 있게 됐다. 비록 mock hero들이지만...
heroes 내보내기
바인딩을 위한 heroes를 내보내기 위해 AppComponent에 public property를 만들자.
app.component.ts (hero array property)
heroes = HEROES;
TypeScript가 HEROES array를 보고 추론해주기 때문에 heroes 타입은 정의하지 않았다.
hero name을 template에 보여주기
정렬되지 않은 list에 hero name을 보여주기 위해서는, 다음과 같은 빈 HTML 형식을 넣어주어야 한다.
app.component.ts (heroes template)
<h2>My Heroes</h2>
<ul class="heroes"> <li> <!-- each hero goes here --> </li> </ul>이제 hero name들을 template에 채우기만 하면 된다.
ngFor과 함께 hero 리스트 만들기
우리의 목표는 component에 있는 heroes 배열을 template에 바인딩하고, 그 배열을 iterate하고, 각각을 보여주는 것이다.
<li> 태그에 *ngFor built-in directive를 추가해주자.
app.component.ts (ngFor)
<li *ngFor="let hero of heroes">
<li> 태그 안에, hero 내용들을 추가해주자.
app.component.ts (ngFor template)
<li *ngFor="let hero of heroes"> <span class="badge">{{hero.id}}</span> {{hero.name}} </li>
브라우저가 새로고침되면서, 영웅들의 리스트가 나올 것이다.
style 추가하기
사용자들은 어떤 영웅이 선택되었는지 hover되었는지 알아야 한다.
component에 스타일을 추가하기 위해서는, 다음과 같은 CSS classes를 @Component decorate의 styles property에 설정해줘야 한다.
src/app/app.component.ts (styles)
styles: [` .selected { background-color: #CFD8DC !important; color: white; } .heroes { margin: 0 0 2em 0; list-style-type: none; padding: 0; width: 15em; } .heroes li { cursor: pointer; position: relative; left: 0; background-color: #EEE; margin: .5em; padding: .3em 0; height: 1.6em; border-radius: 4px; } .heroes li.selected:hover { background-color: #BBD8DC !important; color: white; } .heroes li:hover { color: #607D8B; background-color: #DDD; left: .1em; } .heroes .text { position: relative; top: -3px; } .heroes .badge { display: inline-block; font-size: small; color: white; padding: 0.8em 0.7em 0 0.7em; background-color: #607D8B; line-height: 1em; position: relative; left: -1px; top: -4px; height: 1.8em; margin-right: .8em; border-radius: 4px 0 0 4px; } `]
이 코드 때문에 file이 훨씬 길어지는데, 추후에 style들은 다른 file로 옮길 것이다.
component에 style을 적용할 때, 보통 특정 component에 scope를 두고 싶어한다. 이 스타일들은 외부 HTML에는 영향을 주지 않고 AppComponent에만 적용된다.
영웅들을 보여주기 위한 template은 다음과 같다.
src/app/app.component.ts (styled heroes)
<h2>My Heroes</h2> <ul class="heroes"> <li *ngFor="let hero of heroes"> <span class="badge">{{hero.id}}</span> {{hero.name}} </li> </ul>
'Front-End > AngularJS' 카테고리의 다른 글
[Docs번역-Tutorial]#2.The Hero Editor(양방향 바인딩) (0) | 2017.11.01 |
---|---|
[Docs번역-Tutorial]#1.Introduction (0) | 2017.11.01 |
데이터 바인딩이란? (0) | 2017.10.09 |