簡體   English   中英

具有多個參數和注入項的TypeScript構造函數

[英]TypeScript Constructor with multiple parameters and an injected item

我有一個打字稿類如下:

export class ImageItem{
    constructor(public Id: number, public ImageUrl: string, public Caption: string, public Description: string, private _sanitizer: DomSanitizer)
    {
    }
}

所有構造函數的參數都是與該類相關的屬性,但最后一項是注入我的類的類。 我的問題是,如果我想創建這個類的對象,我想做一些如下所示的事情:

var a=new ImageItem(1, 'image1', 'http://aaa.com/aa.jpg', '')

但是由於注入的項目,它給了我一個錯誤。 我想知道如何解決這個問題。

你需要的是一個工廠服務,它能夠創建這種類的實例,同時注入你想要注入的屬性。

它看起來像這樣。

image-item.ts定義了一個簡單的類:

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) {
    }
}

該工廠是一個注入服務,注入DomSanitizer並具有一個能夠創建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將工廠作為提供程序導入,並使用它來創建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');
  }
}

在angularjs(1)中,可以使用注射器來創建實例,並且可以同時在注射期間給出一些局部值。

在angular(2)中, Injector服務不再提供該功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM