問題

私は以下のようなタイプスクリプトクラスを持っています:

 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のインスタンスを作成できるメソッドを持つinjectableサービスです。

 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 サービスはその機能を提供しません。

  同じタグがついた質問を見る

angulartypescript