Observable:验证来自模拟课程的虚拟数据没有http
我正在学习Observables并尝试实施登录验证服务。 伪数据这样Observable:验证来自模拟课程的虚拟数据没有http
export class Users {
public users: IUser[] = [];
constructor() {
this.users = [
new IUser({ username: "protagonist", password: "hello123" }),
new IUser({ username: "rono67", password: "[email protected]" }),
new IUser({ username: "donaldtrump", password: "[email protected]" })
];
}
和IUSER的结构是这样的。
export class IUser {
usename:string;
password:string;
}
我传递给服务类输入的用户名和密码,我想有一个观察的调用,它通过虚拟数据遍历,如果找到匹配的凭据,应当归还。我不想进行任何HTTP通话。方法是这样的 -
validLogin(accountInfo: IUser): Observable<IUser> {
return ---------
.map((user:IUser) => user.filter((user:IUser) => user.usernanme == accountInfo.username && user.password == accountInfo.password);
}
我不知道哪一段代码需要写在返回的地方------。我在网上得到的所有结果都实现了“return this.http.post”
是否可以在模拟数据上应用RxJs?请建议。
您可以使用Observable.of
或Observable.from
从任何东西创建一个Observable对象。因为,你想要做的IUser
阵列的一些操作,我建议你使用Observable.of
这会是什么样
export class Users {
public users: IUser[] = [];
_users: Observable<IUser[]>;
constructor() {
let users = [
// your dummy data
];
for (let user of users) {
this.users.push(new IUser(user));
}
this._users = Observable.of(this.users);
}
validLogin(accountInfo: IUser): Observable<IUser> {
return this._users.map((user:IUser) =>
user.filter((user:IUser) => user.usernanme == accountInfo.username && user.password == accountInfo.password);
}
}
嗨,我收到以下错误“Observable
'Observable.from'将为每个用户创建一个可观察的流,而不是OP想要的整个数组 – jonrsharpe
@jonrsharpe如何读取整个数组呢? – Protagonist
由于您的Users
类已经是一个模拟的实现(直接包含所有用户的数组),你只需wrap the array into an Observable和过滤基于用户& PWD返回的第一个结果:
validLogin(accountInfo: IUser): Observable<IUser> {
return Rx.Observable.from(users)
.filter(dbUser => dbUser.username == accountInfo.username && dbUser.password == accountInfo.password)
.take(1);//no user found => observable completes without data
}
根据当前implementa如果没有找到具有正确凭证的用户但是有错误,您可能不想返回一个空的Observable,这取决于您。
'Observable.of(...)'?或者你可以使用[内存web API](https://github.com/angular/in-memory-web-api)并练习一些更真实的东西。 – jonrsharpe
[Angular2:将数组转换为Observable]可能的副本(https://*.com/questions/35527500/angular2-convert-array-to-observable) – jonrsharpe