Sun*_*arg 2 observable angular
这是我的角色类
export class Role {
id: number;
name: string;
constructor(id: number, name: string) {
this.id = id;
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我有 roles
roles: Observable<Role[]>;
Run Code Online (Sandbox Code Playgroud)
我正在填满
this.roles = this.roleService.getAllRoles();
Run Code Online (Sandbox Code Playgroud)
现在我想根据id. 为此,我正在使用
let selectedRole = this.roles.filter(role => role.id === group.role)
.map(role=> {console.log(role)});
Run Code Online (Sandbox Code Playgroud)
但这并没有记录任何内容:(。我错过了什么吗?我刚刚开始使用 Angular2
您的 observableroles是一个数组项。它不是该数组中项目的可观察对象,因此role.id在您尝试过滤时不存在。您需要遍历此数组才能提取值:
let selectedRole = this.roles.map(arr =>
{ return arr.filter(role => role.id == group.role) })
Run Code Online (Sandbox Code Playgroud)
有了这个,你最终selected会得到一个可以作为数组的 observable 。有点不确定你想要一个项目还是几个项目......但是如果你只需要一个项目,find而是使用,那么你最终不会得到一个类似数组的 observable,而是一个像 observable 这样的对象。
let selectedRole = this.roles.map(arr =>
{ return arr.find(role => role.id == group.role) })
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!:)
至于是否有点不清楚是否要使用 observables。如果您不想使用 observables,只需自己订阅然后过滤值:
this.roleService.getAllRoles()
.subscribe(data => {
this.roles = data;
// create an array with roles that match the group role
this.selectedRole = this.roles.filter(x => x.id == group.role)
// find a single role that matches the group.role
this.selectedRole = this.roles.find(x => x.id == group.role)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |