angular - 如何定义具有相同父类型的对象数组?
问题描述
当 Toolage 对象显示其 ToolButtonComponent 类型的对象列表时,它们是未定义的。我在这里做错了什么?
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-tool-button',
templateUrl: './tool-button.component.html',
styleUrls: ['./tool-button.component.css']
})
export class ToolButtonComponent implements OnInit {
public constructor(theTile:string) {
}
ngOnInit() {
}
}
export class FunButtonComponent extends ToolButtonComponent implements OnInit {
ngOnInit() {
}
}
export class CoolButtonComponent extends ToolButtonComponent implements OnInit {
ngOnInit() {
}
}
@Component({
selector: 'app-toolage',
template: `
<h1>{{title}}</h1>
<h2>Toolage</h2>
<p>Tools:</p>
<ul>
<li *ngFor="let tool of tools">
{{ tool.theTile }}
</li>
</ul>
`
})
export class Toolage {
private tools: ToolButtonComponent[] = [
new ToolButtonComponent("tool button"),
new FunButtonComponent('fun button'),
new CoolButtonComponent("fa-eraser")
];
constructor() { }
getTools() : ToolButtonComponent[] {
return this.tools;
}
}
解决方案
我是角度和打字稿的新手,但我认为主要问题是构造函数的theTile
参数ToolButtonComponent
没有做任何事情。你想要做的是将它分配给一个属性,ToolButtonComponent
如下所示:
export class ToolButtonComponent implements OnInit {
public theTile:string;
public constructor(theTile:string) {
this.theTile = theTile;
}// end constructor
}// end class
类将FunButtonComponent
继承CoolButtonComponent
此属性。现在您调用将参数从其构造函数super()
解析到父构造函数,父构造函数将自动将其继承属性设置为该参数的值,如下所示:theTile
export class FunButtonComponent extends ToolButtonComponent {
public constructor(theTile:string) {
super(theTile);
}// end constructor
}// end class
export class CoolButtonComponent extends ToolButtonComponent {
public constructor(theTile:string) {
super(theTile);
}// end constructor
}// end class
这一切都应该是这样的:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<app-toolage></app-toolage>
`
})
export class AppComponent {}
@Component({
selector: 'app-toolage',
template : `
<h1>{{title}}</h1>
<h2>Toolage</h2>
<p>Tools:</p>
<ul>
<li *ngFor="let tool of tools">
{{ tool.theTile }}
</li>
</ul>
`
})
export class Toolage {
private tools:ToolButtonComponent[] = [
new ToolButtonComponent("tool button"),
new FunButtonComponent('fun button'),
new CoolButtonComponent("fa-eraser")
];
public getTools():ToolButtonComponent[] {
return this.tools;
}// end function
}// end class
@Component({
selector: 'app-tool-button',
template: `
<button>{{ theTile }}</button>
`
})
export class ToolButtonComponent implements OnInit {
public theTile:string;
public constructor(theTile:string) {
this.theTile = theTile;
}// end constructor
}// end class
export class FunButtonComponent extends ToolButtonComponent {
public constructor(theTile:string) {
super(theTile);
}// end constructor
}// end class
export class CoolButtonComponent extends ToolButtonComponent {
public constructor(theTile:string) {
super(theTile);
}// end constructor
}// end class
推荐阅读
- angular - Angular 6 输入单选检查值在编辑表单中不起作用?
- c# - 按钮控件样式模板和 BackgroundSizing 属性
- python - 数据库中的外键
- statistics - 用于 T 检验的对照组/测试组的最佳样本量
- c++ - 一个类是否可以拥有将当前类作为参数的成员
- python - 使用win32 python将excel中的一列数据格式化为百分比
- python - Python + Selenium 从滚动框中选择 href
- excel - Excel - 分配每个值的索引是一个排序数组
- javascript - 在 CSS 更改上更改 JS
- laravel - 如果用户在 laravel 中分配了多个角色,我如何使用单个角色登录?