angular - TypeScript-konstruktør med flere parametere og et injisert element
Jeg har en TypeScript-klasse som nedenfor:
export class ImageItem{
constructor(public Id: number, public ImageUrl: string, public Caption: string, public Description: string, private _sanitizer: DomSanitizer)
{
}
}
Alle konstruktørens parametere er egenskaper som er relatert til den klassen, men det siste elementet er en klasse som blir injisert i min klasse. Mitt problem er at hvis jeg vil opprette et objekt av denne klassen, vil jeg gjøre noe som nedenfor:
var a=new ImageItem(1, 'image1', 'http://aaa.com/aa.jpg', '')
Men det gir meg en feil på grunn av det injiserte elementet. Jeg lurte på hvordan jeg burde løse dette problemet.
Svar #1
Det du trenger er en fabrikk-tjeneste som er i stand til å lage forekomster av denne typen klasse og samtidig injisere de egenskapene du ønsker å få injisert.
Det ville se omtrent slik ut.
image-item.ts definerer en enkel klasse:
import { DomSanitizer } from '@angular/platform-browser';
export class ImageItem {
constructor(public Id: number, public ImageUrl: string, public Caption: string,
public Description: string, private _sanitizer: DomSanitizer) {
}
}
Fabrikken er en injiserbar tjeneste som injiserer DomSanitizer og har en metode som kan opprette instanser av ImageItem.
import { Injectable } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ImageItem } from './image-item';
@Injectable()
export class ImageItemFactoryService {
constructor(private domSanitizer: DomSanitizer) { }
public createImageItem(id: number, description: string) {
return new ImageItem(id, '', '', description, this.domSanitizer);
}
}
app.component.ts importerer fabrikken som en leverandør og bruker den til å lage instanser av ImageItem.
import { Component } from '@angular/core';
import { ImageItem } from './image-item';
import { ImageItemFactoryService } from './image-item-factory.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [ImageItemFactoryService]
})
export class AppComponent {
private item: ImageItem = null;
constructor(public imageItemFactory: ImageItemFactoryService) {
this.item = imageItemFactory.createImageItem(1, 'something');
}
}
I AngularJS (1) var det mulig å bruke injektoren for å lage en instans, og det var samtidig mulig å gi noen lokale verdier som kunne brukes under injeksjonen.
I Angular (2) tilbyr imidlertid ikke Injector-tjenesten lenger den funksjonaliteten.
