Skip to content

Commit 5802140

Browse files
committed
Angular Core Deep Dive
1 parent 0a661ad commit 5802140

File tree

5 files changed

+65
-32
lines changed

5 files changed

+65
-32
lines changed

src/app/app.component.html

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,30 @@
11
<div class="top-menu">
22

3-
<img class="logo"
4-
src="https://angular-academy.s3.amazonaws.com/main-logo/main-page-logo-small-hat.png">
3+
<img class="logo"
4+
src="https://angular-academy.s3.amazonaws.com/main-logo/main-page-logo-small-hat.png">
55

66
</div>
77

8-
<div class="salmon-theme">
8+
<div>
99

10-
<div class="course-card">
10+
<div class="courses">
1111

12-
Test Card
12+
<course-card *ngFor="let course of courses" (courseSelected)="onCourseSelected($event)"
13+
[course]="course">
1314

14-
</div>
1515

16-
<ng-template [ngIf]="courses[0]" let-course>
16+
<course-image [src]="course.iconUrl"
17+
*ngxUnless="!course.iconUrl">
1718

18-
<div class="courses">
19+
</course-image>
1920

20-
<course-card highlighted #highlighter="hl"
21-
(toggleHighlight)="onToggle($event)"
22-
(courseSelected)="onCourseSelected($event)"
23-
[course]="course">
21+
<div class="course-description">
22+
{{ course.longDescription }}
23+
</div>
2424

25+
</course-card>
2526

26-
<course-image [src]="course.iconUrl"
27-
*ngxUnless="!course.iconUrl">
28-
29-
</course-image>
30-
31-
32-
<div class="course-description"
33-
(dblclick)="highlighter.toggle()" >
34-
{{ course.longDescription }}
35-
</div>
36-
37-
</course-card>
38-
39-
</div>
40-
41-
</ng-template>
27+
</div>
4228

4329

4430
</div>

src/app/app.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import {AfterViewInit, Component, ElementRef, QueryList, ViewChild, ViewChildren} from '@angular/core';
1+
import {AfterViewInit, Component, ElementRef, OnInit, QueryList, ViewChild, ViewChildren} from '@angular/core';
22
import {COURSES} from '../db-data';
33
import {Course} from './model/course';
44
import {CourseCardComponent} from './course-card/course-card.component';
55
import {HighlightedDirective} from './directives/highlighted.directive';
6+
import {CoursesService} from './services/courses.service';
7+
import {Observable} from 'rxjs';
68

79
@Component({
810
selector: 'app-root',
911
templateUrl: './app.component.html',
1012
styleUrls: ['./app.component.css']
1113
})
12-
export class AppComponent implements AfterViewInit {
14+
export class AppComponent implements AfterViewInit, OnInit {
1315

1416
courses = COURSES;
1517

@@ -19,9 +21,15 @@ export class AppComponent implements AfterViewInit {
1921
@ViewChildren(CourseCardComponent, {read: ElementRef})
2022
cards : QueryList<ElementRef>;
2123

24+
courses$: Observable<Course[]>;
2225

23-
constructor() {
2426

27+
constructor(private coursesService: CoursesService) {
28+
29+
}
30+
31+
ngOnInit() {
32+
this.courses$ = this.coursesService.loadCourses();
2533
}
2634

2735
onToggle(isHighlighted:boolean) {

src/app/app.module.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { CourseCardComponent } from './course-card/course-card.component';
77
import { CourseImageComponent } from './course-image/course-image.component';
88
import { HighlightedDirective } from './directives/highlighted.directive';
99
import { NgxUnlessDirective } from './directives/ngx-unless.directive';
10+
import {HttpClientModule} from '@angular/common/http';
1011

1112
@NgModule({
1213
declarations: [
@@ -20,7 +21,9 @@ import { NgxUnlessDirective } from './directives/ngx-unless.directive';
2021
BrowserModule,
2122
BrowserAnimationsModule
2223
],
23-
providers: [],
24+
providers: [
25+
HttpClientModule
26+
],
2427
bootstrap: [AppComponent]
2528
})
2629
export class AppModule { }
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { TestBed, inject } from '@angular/core/testing';
2+
3+
import { CoursesService } from './courses.service';
4+
5+
describe('CoursesService', () => {
6+
beforeEach(() => {
7+
TestBed.configureTestingModule({
8+
providers: [CoursesService]
9+
});
10+
});
11+
12+
it('should be created', inject([CoursesService], (service: CoursesService) => {
13+
expect(service).toBeTruthy();
14+
}));
15+
});

src/app/services/courses.service.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Injectable } from '@angular/core';
2+
import {HttpClient} from '@angular/common/http';
3+
import {Course} from '../model/course';
4+
5+
@Injectable({
6+
providedIn: 'root'
7+
})
8+
export class CoursesService {
9+
10+
11+
constructor(private http: HttpClient) {
12+
13+
14+
15+
}
16+
17+
loadCourses() {
18+
return this.http.get<Course[]>('/api/courses');
19+
}
20+
21+
}

0 commit comments

Comments
 (0)