angular - 获取选择一个菜单的默认值
问题描述
我有两个类的映射是:
用户 *--------------------1 性别
我在list-users.component.html上有用户列表。选择一个用户进行修改后,我将被重定向到modify-user.component.html
下面是所需的文件: * list-users.component.html是:
<table class="table">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Sexe</th>
</tr>
</thead>
<tbody *ngIf="!loader">
<tr *ngFor="let user of userbs | async" style="width: 1500px;">
<td>{{user.id}}</td>
<td>{{user.name}}</td>
<td>{{user.sexe.libelle}}</td>
</tr>
</tbody>
</table>
whereuserbs
是通过使用userService.getUsersList()
类型为 的服务获得的Observable<User[]>
。
modify-user.component.html是:
<form [formGroup]="editForm" (ngSubmit)="onSubmit()">
<div class="form-group">
<label for="name">Name</label>
<input type="text" formControlName="name" placeholder="Name" name="name" class="form-control" id="name">
</div>
<div class="form-group">
<label for="name">Sexe</label>
<select (change)="onChangeSexeName($event)" class="form-control select2" style="width: 100%;">
<option *ngFor="let sexe of sexes" [ngValue]="sexe" [selected]="selected">{{sexe.name}}</option>
</select>
==> Original Sexe: {{selectedSexeUserCompare.name}}
</div>
<button class="btn btn-success">Update</button>
</form>
和modify-user.component.ts是:
export class ModifyUserComponent implements OnInit {
editForm: FormGroup;
submitted = false;
private selectedSexe;
users: Observable<User[]>;
libelleSexe: string;
usrId: String;
selectedSexeUserCompare = { num: localStorage.getItem("selectedSexeId"), name: localStorage.getItem("selectedSexeName") }
sexeName: String;
sexes: Array<Object> = [
{ num: 1, name: "Female" },
{ num: 2, name: "Male" }
];
compareFn(a, b) {
console.log(a, b, a && b && a.num == b.num);
return a && b && a.num == b.num;
}
constructor(private formBuilder: FormBuilder, private router: Router, private userService: UserService) { }
ngOnInit() {
this.sexeName = localStorage.getItem("sexeLibelle");
let userId = localStorage.getItem("editUserId");
this.usrId = localStorage.getItem("editUserId");
if (!userId) {
alert("Invalid action.")
this.router.navigate(['users-list']);
return;
}
this.userService.getUserEntityId(+userId).map(se => se.sexe.libelle).subscribe((response) => {
this.libelleSexe = response;
localStorage.setItem("sexeLibelle", this.libelleSexe);
});
this.editForm = this.formBuilder.group({
id: [],
name: ['', Validators.required],
username: ['', Validators.required],
email: ['', Validators.required],
password: ['', Validators.required],
age: ['', Validators.required],
active: ['false']
});
this.userService.getUserId(+userId).subscribe(data => {
this.userService.getUserEntityId(+userId).map(se => se.sexe.libelle).subscribe((response) => {
this.libelleSexe = response;
let sexe = this.userService.getSexeByLibelle(this.libelleSexe);
localStorage.setItem("sexeLibelle", this.libelleSexe);
this.editForm.patchValue(data);
});
});
}
onChangeSexeName($event) {
this.selectedSexe = $event.target.options[$event.target.options.selectedIndex].text;
}
onSubmit() {
this.userService.updateUsera(this.editForm.value, this.selectedSexe).subscribe(data => {
this.router.navigate(['users-list']);
},
error => {
alert(error);
});
}
}
在修改用户页面上,我通常会得到性别列表(女性、男性)的第一个 sexe libelle ,而不是正确的 sexe libelle,就像显示的屏幕截图一样。
你能帮我解决这个问题吗?非常感谢。
解决方案
我不确定你为什么不添加sex
到你的editForm
. 添加sex
到您的editForm
并使用存储在您的localStorage
.
this.editForm = this.formBuilder.group({
sex: [selectedSexeUserCompare.num, Validators.required]
// Add form controls here
});
我在您的 HTML 中注意到的另一个问题是您将ngValue
in设置options
为整个sexe
对象。您应该将其设置为唯一值,例如对象num
中的属性sexe
。
修改-user.component.html
<select formControlName="sex" (change)="onChangeSexeName($event)" class="form-control select2" style="width: 100%;">
<option *ngFor="let sexe of sexes" [ngValue]="sexe.num">
{{sexe.name}}
</option>
</select>
编辑:这是StackBlitz上的一个工作示例
推荐阅读
- arrays - 数组中元素的总和和平均值?
- networkx - 从过滤边的 subgraph_view 中获取 networkx 过滤节点
- java - 调用newthread后如何获取线程索引?
- flutter - 未定义命名参数“fileExtension”
- python - 我想从python中的给定信息中生成随机字符串
- reactjs - 将 Wordpress 博客集成到现有的 React 网站
- c# - 我创建了一个类,女巫是同一命名空间中另一个类的子类。但 Visual Studio 无法识别父类中的受保护字段
- python - 将 word2vec 模型文件转换为文本
- certificate - 使用通配符证书设置 ADFS SSL 证书时出错
- typescript - 如何在 React-Native 中使用 Firebase 对用户进行离线身份验证?