使用 Firebase 的 Firestore 的动态下拉列表 - AngularFire2
Dynamic dropdowns using Firebase's Firestore - AngularFire2
我创建了一个像这样的集合(JSON 等效):
sports: {
football: {
name: 'football',
varieties: {
11aside: {
name: '11 a side'
},
6aside: {
name: '6aside'
}
}
}
}
我可以像这样在 select 框中显示不同的运动项目:
// sports.controller.ts
this.sports = db.collection('sports').valueChanges();
// sports.html
<select formControlName="sport">
<option value="">- Select -</option>
<option *ngFor="let sport of sports | async" [value]="sport.id">{{sport.name}}</option>
</select>
一旦 selection 完成,我想显示第二个 select 框,让用户选择 'variety'。在 angularfire2 中实现此目标的最佳方法是什么?
感谢您的帮助。
我不明白为什么这必须特别依赖于 angularfire2。假设您已经将第一个 select 下拉列表 sport
的 formControl 初始化为空字符串,并且在初始加载时它没有预先 select 编辑有效选项。喜欢,
this.form = this.formbuilder.group({
sport: ''
});
您可以在模板中查找其值变化以显示相应的品种二级下拉列表。
假设您有一个 'property' 来根据 selected 值在任何给定时刻保存品种的值,在您的组件中监听第一个 select 控件的值变化,
varieties: any[] = null; // declare varieties property in component
this.form.get('sport').valueChanges
.subscribe((newVal) => {
if (!newval) {
this.varieties = null;
} else {
this.varieties = this.sports.filter((elem) => elem.id === newVal)[0].varieties;
// assuming each newVal is actually the property value of 'id' based on '[value]="sport.id"' <-- this assignment in the template
}
});
现在只需将这个新的 select 下拉列表也添加到您的模板中,
<select formControlName="sport">
<option value="">- Select -</option>
<option *ngFor="let sport of sports | async" [value]="sport.id">{{sport.name}}</option>
</select>
<select *ngIf="varities">
<option value="">- Select -</option>
<option *ngFor="let variety of varities" [value]="variety.name">{{variety.name}}</option>
</select>
您可能需要根据要分配给这个新的 select 下拉列表的实际 value
修改代码,甚至可能为品种 selection 添加一个新的 formControl。希望对你有帮助。
我创建了一个像这样的集合(JSON 等效):
sports: {
football: {
name: 'football',
varieties: {
11aside: {
name: '11 a side'
},
6aside: {
name: '6aside'
}
}
}
}
我可以像这样在 select 框中显示不同的运动项目:
// sports.controller.ts
this.sports = db.collection('sports').valueChanges();
// sports.html
<select formControlName="sport">
<option value="">- Select -</option>
<option *ngFor="let sport of sports | async" [value]="sport.id">{{sport.name}}</option>
</select>
一旦 selection 完成,我想显示第二个 select 框,让用户选择 'variety'。在 angularfire2 中实现此目标的最佳方法是什么?
感谢您的帮助。
我不明白为什么这必须特别依赖于 angularfire2。假设您已经将第一个 select 下拉列表 sport
的 formControl 初始化为空字符串,并且在初始加载时它没有预先 select 编辑有效选项。喜欢,
this.form = this.formbuilder.group({
sport: ''
});
您可以在模板中查找其值变化以显示相应的品种二级下拉列表。
假设您有一个 'property' 来根据 selected 值在任何给定时刻保存品种的值,在您的组件中监听第一个 select 控件的值变化,
varieties: any[] = null; // declare varieties property in component
this.form.get('sport').valueChanges
.subscribe((newVal) => {
if (!newval) {
this.varieties = null;
} else {
this.varieties = this.sports.filter((elem) => elem.id === newVal)[0].varieties;
// assuming each newVal is actually the property value of 'id' based on '[value]="sport.id"' <-- this assignment in the template
}
});
现在只需将这个新的 select 下拉列表也添加到您的模板中,
<select formControlName="sport">
<option value="">- Select -</option>
<option *ngFor="let sport of sports | async" [value]="sport.id">{{sport.name}}</option>
</select>
<select *ngIf="varities">
<option value="">- Select -</option>
<option *ngFor="let variety of varities" [value]="variety.name">{{variety.name}}</option>
</select>
您可能需要根据要分配给这个新的 select 下拉列表的实际 value
修改代码,甚至可能为品种 selection 添加一个新的 formControl。希望对你有帮助。