【发布时间】:2018-03-21 05:22:53
【问题描述】:
我正在尝试将单个变量从一个组件传递到另一个组件。它是一个数组,声明如下。
@Component({
selector: 'component1',
templateUrl: './component1.component.html',
styleUrls: ['./component1.css'],
})
export class Component1 implements OnInit{
......
columnVars = Object.keys(this.settings.columns);
......
}
所以我设置了我的第二个组件来扩展我的第一个组件并像这样引用变量,它按预期工作。
<table>
<thead>
<tr>
<th>Column</th>
<th>Description</th>
</tr>
</thead>
<tbody *ngFor="let col of columnVars">
<tr>
<td>{{settings.columns[col]['title']}}</td>
<td>{{settings.columns[col]['description']}}</td>
</tr>
</tbody>
</table>
第二个组件看起来像这样,这就是问题所在。
@Component({
selector: 'component2',
templateUrl: './component2.html',
styleUrls: ['./component2.css']
})
export class Component2 extends Component1 implements OnInit {
buttonObjList = {
headendsButton: {
title: 'Back to headends',
route: '/headends',
}
};
}
我得到了错误
ERROR in /home/grady/honeybadger-mat/src/app/column-info/column-info.component.ts (9,14): Class 'ColumnInfoComponent' incorrectly extends base class 'IngestViewComponent'.
Types of property 'buttonObjList' are incompatible.
Type '{ headendsButton: { title: string; route: string; }; }' is not assignable to type '{ columnInfo: { title: string; route: string; }; }'.
Property 'columnInfo' is missing in type '{ headendsButton: { title: string; route: string; }; }'.
这是有道理的。所以现在我的问题是有没有办法在没有继承的情况下将变量传递给另一个组件,或者有没有办法覆盖特定的继承变量,如 buttonObjList?先感谢您。
编辑:澄清一下,我不需要在我的第一个组件中显示第二个组件。所以在这种情况下,@input 指令似乎对我没有好处。如果我错了纠正我。
【问题讨论】:
-
不清楚您要完成什么。 2个组件有什么关系?在 2 个组件之间传递信息高度依赖于它们的关联方式。您的问题并不清楚这种背景。
-
它们并不真正相关。他们只是不同的看法。一个组件显示一个表格。另一个组件解释了表格中每一列的含义。
-
有点困惑,所以如果一个组件解释了由另一个组件表示的表格中每一列的含义,它们应该以某种方式相关,对吧?我的意思是这个列组件是否出现在表格组件的模板定义中?
-
列组件不显示在表格组件中。这是一个单独的视图。我可以使用什么样的关系不是子组件?我正在考虑使列组件成为一种模式来简化这一点,但我仍然想知道未来的答案。
标签: angular inheritance