是否可以将类型传递给可以 'newed' 的 Angular 组件?
Is it possible to pass a type to an Angular component that can 'newed'?
我正在开发一个通用的下拉组件。如果用户输入的值不在列表中,我想在 itemSelected 事件中 return 一个相同类型 的新对象 。我需要保留方法和属性——所以仅仅创建一个通用对象是行不通的。即使列表是空的,这也需要工作,所以它不会工作像 Object.create(this.list[0]);
到目前为止,我的解决方法是只传递一个引用对象,我可以将其与 Object.create 一起使用,但这看起来很蹩脚。
以下片段显示了我正在尝试做的事情。有没有办法做到这一点或更好的方法来做我想做的事?谢谢 - 乔恩
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-generic-new',
templateUrl: './generic-new.component.html',
styleUrls: ['./generic-new.component.scss']
})
export class GenericNewComponent implements OnInit {
ngOnInit(): void {}
@Input() type:any
createNewType():any {
// this is what I'm trying to do - but doesn't work
return new this.type();
}
}
使用泛型
class container<T> {
id: T;
key: T;
displayValue: T;
type : T;
}
//allows you to control the type, here we are allowing any, but could be person, address etc.
let myContainer = new container<any>();
myContainer.id = 0;
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "UserEnteredDisplayValue;
myContiner.type //allow access to anything or a specific class type.
不使用泛型。
class container{
id:number;
key:number;
displayValue:string;
type:any;
}
let myContainer = new contaier();
myContainer.number = 10;
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "User Entered Display Value";
myContainer.type = {key:myContainer.key, display: myContainer.displayValue, doSomething: function(){//do something here.}}
请注意,上面的任何值都可以计算出来,而不是静态的,例如,通常会计算 ID。
@Input() type:container
createNewType():any {
// this is what I'm trying to do - but doesn't work
return
let myContainer = new container<any>();
myContainer.id = this.getNextID();
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "UserEnteredDisplayValue;
myContiner.type //allow access to anything or a specific class type.
}
您的表单需要公开用户需要通过绑定到此 cass 模型来更改的所有属性。
我正在开发一个通用的下拉组件。如果用户输入的值不在列表中,我想在 itemSelected 事件中 return 一个相同类型 的新对象 。我需要保留方法和属性——所以仅仅创建一个通用对象是行不通的。即使列表是空的,这也需要工作,所以它不会工作像 Object.create(this.list[0]);
到目前为止,我的解决方法是只传递一个引用对象,我可以将其与 Object.create 一起使用,但这看起来很蹩脚。
以下片段显示了我正在尝试做的事情。有没有办法做到这一点或更好的方法来做我想做的事?谢谢 - 乔恩
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-generic-new',
templateUrl: './generic-new.component.html',
styleUrls: ['./generic-new.component.scss']
})
export class GenericNewComponent implements OnInit {
ngOnInit(): void {}
@Input() type:any
createNewType():any {
// this is what I'm trying to do - but doesn't work
return new this.type();
}
}
使用泛型
class container<T> {
id: T;
key: T;
displayValue: T;
type : T;
}
//allows you to control the type, here we are allowing any, but could be person, address etc.
let myContainer = new container<any>();
myContainer.id = 0;
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "UserEnteredDisplayValue;
myContiner.type //allow access to anything or a specific class type.
不使用泛型。
class container{
id:number;
key:number;
displayValue:string;
type:any;
}
let myContainer = new contaier();
myContainer.number = 10;
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "User Entered Display Value";
myContainer.type = {key:myContainer.key, display: myContainer.displayValue, doSomething: function(){//do something here.}}
请注意,上面的任何值都可以计算出来,而不是静态的,例如,通常会计算 ID。
@Input() type:container
createNewType():any {
// this is what I'm trying to do - but doesn't work
return
let myContainer = new container<any>();
myContainer.id = this.getNextID();
myContainer.key = "UserEnteredKey";
myContainer.displayValue = "UserEnteredDisplayValue;
myContiner.type //allow access to anything or a specific class type.
}
您的表单需要公开用户需要通过绑定到此 cass 模型来更改的所有属性。