diff --git a/apps/angular/16-master-dependency-injection/src/app/app.component.ts b/apps/angular/16-master-dependency-injection/src/app/app.component.ts index 332ec9877..d2adee532 100644 --- a/apps/angular/16-master-dependency-injection/src/app/app.component.ts +++ b/apps/angular/16-master-dependency-injection/src/app/app.component.ts @@ -1,8 +1,12 @@ -import { TableComponent } from '@angular-challenges/shared/ui'; -import { AsyncPipe } from '@angular/common'; -import { ChangeDetectionStrategy, Component, Directive } from '@angular/core'; +import { AsyncPipe, CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + Directive, + Injector, +} from '@angular/core'; import { CurrencyPipe } from './currency.pipe'; -import { CurrencyService } from './currency.service'; +import { CURRENCY_CODE, CurrencyService } from './currency.service'; import { Product, products } from './product.model'; interface ProductContext { @@ -22,33 +26,53 @@ export class ProductDirective { } @Component({ - imports: [TableComponent, CurrencyPipe, AsyncPipe, ProductDirective], - providers: [CurrencyService], + imports: [CommonModule, CurrencyPipe, AsyncPipe], selector: 'app-root', template: ` - - +
+ - @for (col of displayedColumns; track $index) { - - } + - - - - - - - - - + + + + + + + + + + + + + +
- {{ col }} - {{ col }}
{{ product.name }}{{ product.priceA | currency | async }}{{ product.priceB | currency | async }}{{ product.priceC | currency | async }}
{{ product.name }}{{ product.priceA | currency | async }}{{ product.priceB | currency | async }}{{ product.priceC | currency | async }}
+ + + `, changeDetection: ChangeDetectionStrategy.OnPush, }) export class AppComponent { products = products; displayedColumns = ['name', 'priceA', 'priceB', 'priceC']; + + createInjector(product: Product) { + return Injector.create({ + providers: [ + { provide: CURRENCY_CODE, useValue: product.currencyCode }, + CurrencyService, + ], + }); + } } diff --git a/apps/angular/16-master-dependency-injection/src/app/currency.service.ts b/apps/angular/16-master-dependency-injection/src/app/currency.service.ts index 38b403e48..34113c1ed 100644 --- a/apps/angular/16-master-dependency-injection/src/app/currency.service.ts +++ b/apps/angular/16-master-dependency-injection/src/app/currency.service.ts @@ -1,6 +1,7 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable, InjectionToken } from '@angular/core'; import { ComponentStore } from '@ngrx/component-store'; import { map } from 'rxjs'; +export const CURRENCY_CODE = new InjectionToken('CURRENCY_CODE'); export interface Currency { name: string; @@ -23,7 +24,7 @@ export class CurrencyService extends ComponentStore<{ code: string }> { map((code) => currency.find((c) => c.code === code)?.symbol ?? code), ); - constructor() { - super({ code: 'EUR' }); + constructor(@Inject(CURRENCY_CODE) code: string) { + super({ code }); } }