Angular 角度可观测问题
我已经试着让observable工作了一段时间,但我一直失败 此时此刻,我的代码开始看起来更像战场,而不是通常的顺序 我不断得到“错误类型错误:无法读取未定义的属性‘map’。” 我尝试导入json数据(有效),然后过滤出“活动”的成员(有效),按字母顺序排序(无效),并获得“团队”列中所有内容的唯一列表(无效) 服务如下所示:Angular 角度可观测问题,angular,typescript,observable,Angular,Typescript,Observable,我已经试着让observable工作了一段时间,但我一直失败 此时此刻,我的代码开始看起来更像战场,而不是通常的顺序 我不断得到“错误类型错误:无法读取未定义的属性‘map’。” 我尝试导入json数据(有效),然后过滤出“活动”的成员(有效),按字母顺序排序(无效),并获得“团队”列中所有内容的唯一列表(无效) 服务如下所示: import { Injectable } from '@angular/core'; import { Http, Response } from '@angular
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
//import 'rxjs/add/operator/catch';
//import 'rxjs/add/operator/map';
import { catchError, map, tap } from 'rxjs/operators';
import { Member } from '../class/member';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable()
export class UserinfoService
{
//constructor
constructor(private http: HttpClient)
{
}
//methods or services
getMembers(): Observable<Member[]>
{
return this.http.get<Member[]>('http://datalocation.com/JsonData/api/teammembers');
}
}
任何帮助都将不胜感激。
当它只是一个服务时,我让一切都正常工作,但当我开始使用Observable时,一切都变得一团糟。userinfoService.getMembers().subscribe(teamMembers=>this.teamMembers=teamMembers
.filter(member=>member.isActive)
.sort((a,b)=>a.lastName.localeCompare(b.lastName))
听说您已经在组件变量中获得了teamMembers数组。因此,无需在后面的部分中进行必要的映射。您可以直接在teamMembers数组上使用筛选器
//getTeams
this.teams = this.teamMembers.filter((value, index, self) => self.indexOf(value) === index)
userinfoService.getMembers().subscribe(teamMembers=>this.teamMembers=teamMembers
.filter(member=>member.isActive)
.sort((a,b)=>a.lastName.localeCompare(b.lastName))
听说您已经在组件变量中获得了teamMembers数组。因此,无需在后面的部分中进行必要的映射。您可以直接在teamMembers数组上使用筛选器
//getTeams
this.teams = this.teamMembers.filter((value, index, self) => self.indexOf(value) === index)
你只需要移动订阅中的所有内容 也不是100%在构造函数中完成所有事情,我通常在我的ngOnInit中做这类事情,但现在既不在这里也不在那里 你可以做的另一件事是:
teamMembers:any[]=新数组()代码>
这实际上会正确初始化数组,这样就不会出现未定义的情况。您只需移动订阅中的所有内容即可
也不是100%在构造函数中完成所有事情,我通常在我的ngOnInit中做这类事情,但现在既不在这里也不在那里
你可以做的另一件事是:
teamMembers:any[]=新数组()代码>
这实际上将正确初始化数组,使其不会未定义。订阅中的代码是异步运行的
您正试图在订阅设置this.teamsMembers.map之前执行this.teamsMembers.map
您应该将您的this.teams=this.teamsMembers.map…
代码放在subscribe lambda函数中。订阅中的代码是异步运行的
您正试图在订阅设置this.teamsMembers.map之前执行this.teamsMembers.map
您应该将this.teams=this.teamsMembers.map…
代码放入subscribe lambda函数中。this.teamMembers
在其余构造函数运行时尚未填充(因为这是异步发生的),因此当您尝试填充this.teams
时,您正在对未定义的值调用map
。此.teamMembers
在其余构造函数运行时尚未填充(因为这是异步发生的),因此当您尝试填充此.teams
时,您正在对未定义的值调用map
。请原谅我的无知,但是我如何得到列team的值作为结果呢?对不起,我不明白你在问什么,你能告诉我在收到teamMembers数组后你想要得到什么吗?表中的一列称为“team”。每个团队成员都被分配到其中一个团队。getTeams方法是获取一个包含每个团队的列表,其中不包含重复的团队。然后,变量“teams”用于填充一个下拉列表,用户可以从中选择.ohk,这正是您所需的.map
操作符,在获取teams数组后,您是否可以使用.map
操作符。或者只需更改filter
和map
运算符的顺序。首先进行筛选,然后进行.map。请原谅我的无知,但我如何获得列team的值,然后作为结果?对不起,我不明白您在问什么,您能告诉我在收到teamMembers数组后您想要获得什么吗?表中的一列称为“team”。每个团队成员都被分配到其中一个团队。getTeams方法是获取一个包含每个团队的列表,其中不包含重复的团队。然后,变量“teams”用于填充一个下拉列表,用户可以从中选择.ohk,这正是您所需的.map
操作符,在获取teams数组后,您是否可以使用.map
操作符。或者只需更改filter
和map
运算符的顺序。首先进行筛选,然后进行.map。