你的 plunker 有两个问题。
- 第一个问题,您将 undefined 传递给 second-selector。
first 最初是未定义的,因为您只在更改时设置它。这是破坏你的组件。您可以将*ngIf 添加到您的second-selector 或使用初始值初始化变量first。例如父母1.
为了在你的 plunker 上解决这个问题,我在 second-selector 上添加了 *ngIf
- 第二个问题,在
select 上,您发出一个字符串值,表示父对象e.g. parent1,但不是实际的父对象,而在 SecondSelectorPipe 上,您希望参数不是父对象一个字符串。
为了解决这个问题,我在first-selector 上将code 属性分配给<option>,并更改了 SecondSelectorPipe 以期望父对象的字符串代码。
改变的选项元素:
<option *ngFor="#val of values" [value]="val.code">{{val.title}}</option>
管道上的更改线:
return value.filter((item)=>item.parent === parent);
Here is your plunker working
但是,如果您只是将管道用于这样一个简单的任务,恕我直言,您可以通过用 getter 替换 second-selector 中的 values 变量并过滤返回的列表来替换它。
例子:
export class SecondSelector{
@Output() select = new EventEmitter();
@Input() parent;
valuesList:ValueModel[] = [
new ValueModel("ValueCode6","Child1","ValueCode1"),
new ValueModel("ValueCode7","Child2","ValueCode1"),
new ValueModel("ValueCode8","Child3","ValueCode2"),
new ValueModel("ValueCode9","Child4","ValueCode3"),
new ValueModel("ValueCode10","Child5","ValueCode3"),
new ValueModel("ValueCode11","Child6","ValueCode4"),
new ValueModel("ValueCode12","Child7","ValueCode5"),
new ValueModel("ValueCode13","Child8","ValueCode5"),
new ValueModel("ValueCode14","Child9","ValueCode5"),
new ValueModel("ValueCode15","Child10","ValueCode5"),
];
get values(){
return this.parent ?
this.valuesList.filter(item=> item.parent === this.parent):
[]; // to avoid errors, if parent is undefined, return empty list
}
}
Here is a working plunker