Angular 2观察http结果

标签 angular

这里我有一个服务。它的signIn方法将触发另一个Service的方法,该方法返回一个Observable。每个组件都应该能够订阅该 Observable 的结果。因此,我创建了一个公共(public)响应变量作为 Observable,可以从每个组件访问它。我不认为我可以直接订阅signIn,因为它需要两个参数,而只有一个观察者实际上知道这些参数。

问题是响应在开始时未定义。所以你不能在另一个组件的构造函数中订阅它。

那么当我不知道数据什么时候到达时,如何订阅响应呢?有什么想法吗?

export class AuthService{

    public response:Observable<any[]>;

    constructor(private httpService:HTTPService){
        this.response = new Observable();
    }

    signIn(user:String, password:String){

        this.response = this.httpService.query({user: user, pass: password})
        .map((r: Response) => r.json());

    }
}

这是用户和密码来自的 AuthComponent 方法

onSubmit(f:NgForm){
    this.authService.signIn(f.value.user, f.value.password);
}

最佳答案

通常你应该返回那个Observable:

import { BehaviorSubject } from 'rxjs';

export class AuthService {

    public data = new BehaviorSubject<any[]>([]);

    constructor(private httpService: HTTPService) { }

    signIn(user:String, password:String): Observable<any[]> {

        return this.httpService.query({user: user, pass: password})
           .map((r: Response) => r.json())
           .map(data => { this.data.next(data); return data; }); // OPTIONAL if you want to store data in you service..

    }
}

其他组件现在可以订阅该数据主题。

调用组件将订阅并完成。

Http-Request-Observables 在每次请求后完成。

关于Angular 2观察http结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348475/

相关文章:

angular - 测试不返回任何值的方法(jasmine angular4)

Angular Material 2 个选项卡滚动显示在导航上

javascript - 如何在 ShadowDOM 中通过 id 查找元素?

angular - 如何在 Angular 中将一个 formGroup 复制到另一个?

angular - 在angular2中使用订阅调用成功,错误回调?

validation - 如何在按钮提交时验证表单

javascript - promise.all 无法访问拒绝功能

javascript - 找不到名称 'require' 。 Angular 2

Angular 6 - 不添加 header 的身份验证 token 拦截器

angular - 在为子级使用 router-outlet 时如何向 Angular 父级添加 CSS 类