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.

Relaterte artikler