我有一个打字稿类如下:
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,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)中,可以使用注射器来创建实例,并且可以同时在注射期间给出一些局部值.