Questions tagged «observable»

可观察对象通常是一种编程构造,可以被代码的其他部分“观察者”“监视”。对于可观察对象,不同的框架和编程语言具有不同的实现,因此此标记通常应与其他标记结合使用。

21
Angular / RxJs我应该何时退订`Subscription`
我应该何时存储Subscription实例并unsubscribe()在NgOnDestroy生命周期中调用,何时可以忽略它们? 保存所有订阅会在组件代码中带来很多麻烦。 HTTP客户端指南会忽略这样的订阅: getHeroes() { this.heroService.getHeroes() .subscribe( heroes => this.heroes = heroes, error => this.errorMessage = <any>error); } 同时,《路线与导航指南》指出: 最终,我们将导航到其他地方。路由器将从DOM中删除此组件并销毁它。我们需要在此之前进行自我清理。具体来说,我们必须在Angular销毁组件之前取消订阅。否则可能会导致内存泄漏。 我们取消订阅Observable该ngOnDestroy方法。 private sub: any; ngOnInit() { this.sub = this.route.params.subscribe(params => { let id = +params['id']; // (+) converts string 'id' to a number this.service.getHero(id).then(hero => this.hero = hero); }); } …

7
委托:EventEmitter或可观察到的Angular
我正在尝试在Angular中实现类似委托模式的功能。当用户单击时nav-item,我想调用一个函数,该函数然后发出一个事件,而该事件又应由侦听该事件的其他某些组件处理。 这是场景:我有一个Navigation组件: import {Component, Output, EventEmitter} from 'angular2/core'; @Component({ // other properties left out for brevity events : ['navchange'], template:` <div class="nav-item" (click)="selectedNavItem(1)"></div> ` }) export class Navigation { @Output() navchange: EventEmitter<number> = new EventEmitter(); selectedNavItem(item: number) { console.log('selected nav item ' + item); this.navchange.emit(item) } } 这是观察部分: export class …

10
我们什么时候应该使用Observer和Observable?
面试官问我: 什么是Observer,什么Observable时候应该使用它们? 我并不了解这些术语,因此当我回到家并开始使用Google Observer和Google进行搜索时Observable,发现了来自不同资源的一些观点: 1)Observable是一个类,Observer是一个接口。 2)Observable该类维护一个Observers 列表。 3)当一个Observable对象被更新时,它调用其update()每个Observers 的方法来通知它已被更改。 我发现这个例子: import java.util.Observable; import java.util.Observer; class MessageBoard extends Observable { public void changeMessage(String message) { setChanged(); notifyObservers(message); } } class Student implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("Message board changed: " + arg); } } public …

11
返回一个空的Observable
该函数more()应该Observable从get请求返回an export class Collection{ public more = (): Observable<Response> => { if (this.hasMore()) { return this.fetch(); } else{ // return empty observable } } private fetch = (): Observable<Response> => { return this.http.get('some-url').map( (res) => { return res.json(); } ); } } 在这种情况下,我只能在请求hasMore()为true的情况下执行请求,否则我会在subscribe()function 上遇到错误subscribe is not defined,如何返回可观察到的空值? this.collection.more().subscribe( (res) =>{ …


6
从Angular 2服务创建和返回Observable
这更多是一个“最佳实践”问题。一共有三个玩家:a Component,a Service和a Model。在Component被调用Service从数据库中获取数据。该Service方法是使用: this.people = http.get('api/people.json').map(res => res.json()); 返回一个Observable。 在Component可以只订阅Observable: peopleService.people .subscribe(people => this.people = people); } 但是,我真正想要的是Service返回一个从数据库检索Array of Model的数据创建的对象Service。我意识到Component可以在subscription方法中创建此数组,但是我认为,如果服务执行此操作并将其提供给,它将更干净Component。 如何Service创建一个Observable包含该数组的new 并返回该数组?

5
如何从http.request()正确捕获异常?
我的代码的一部分: import {Injectable} from 'angular2/core'; import {Http, Headers, Request, Response} from 'angular2/http'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; @Injectable() export class myClass { constructor(protected http: Http) {} public myMethod() { let request = new Request({ method: "GET", url: "http://my_url" }); return this.http.request(request) .map(res => res.json()) .catch(this.handleError); // Trouble line. // …

5
如何从类似于Angular中的http one的静态数据创建Observable?
我正在使用此方法的服务: export class TestModelService { public testModel: TestModel; constructor( @Inject(Http) public http: Http) { } public fetchModel(uuid: string = undefined): Observable<string> { if(!uuid) { //return Observable of JSON.stringify(new TestModel()); } else { return this.http.get("http://localhost:8080/myapp/api/model/" + uuid) .map(res => res.text()); } } } 在组件的构造函数中,我这样订阅: export class MyComponent { testModel: TestModel; testModelService: …

9
如何从Angle的Observable / http / async调用返回响应?
我有返回一个observable的服务,该服务向我的服务器发出一个http请求并获取数据。我想使用这些数据,但最终总是得到undefined。有什么问题? 服务内容: @Injectable() export class EventService { constructor(private http: Http) { } getEventList(): Observable<any>{ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.get("http://localhost:9999/events/get", options) .map((res)=> res.json()) .catch((err)=> err) } } 零件: @Component({...}) export class EventComponent { myEvents: any; constructor( private es: …

8
如何检查可观察数组的长度
在我的Angular 2组件中,我有一个Observable数组 list$: Observable<any[]>; 在我的模板中 <div *ngIf="list$.length==0">No records found.</div> <div *ngIf="list$.length>0"> <ul> <li *ngFor="let item of list$ | async">item.name</li> </ul> </div> 但是list $ .length在Observable数组中不起作用。 更新: 似乎(list $ | async)?. length给了我们长度,但是下面的代码仍然不起作用: <div> Length: {{(list$ | async)?.length}} <div *ngIf="(list$ | async)?.length>0"> <ul> <li *ngFor="let item of (list$ | async)"> {{item.firstName}} </li> </ul> …

5
Angular 4+ ngOnDestroy()在使用中-销毁可观察到的
在有角度的应用程序中,我们ngOnDestroy()为组件/指令提供了生命周期挂钩,并使用该挂钩取消订阅可观察对象。 我想清除/破坏在@injectable()服务中创建的可观察性。我看到一些帖子说ngOnDestroy()可以在服务中使用。 但是,这是一种好的做法,并且是唯一的方法吗?何时调用它?有人请澄清。

1
使用TypeScript从Angular2中的http数据链接RxJS Observables
在过去四年中愉快地使用AngularJS 1. *之后,我目前正在尝试自学Angular2和TypeScript!我必须承认我很讨厌它,但是我确定我的尤里卡时刻就在眼前。。。无论如何,我已经在虚拟应用程序中编写了一项服务,该服务将从我编写的提供JSON的电话后端获取http数据。 import {Injectable} from 'angular2/core'; import {Http, Headers, Response} from 'angular2/http'; import {Observable} from 'rxjs'; @Injectable() export class UserData { constructor(public http: Http) { } getUserStatus(): any { var headers = new Headers(); headers.append('Content-Type', 'application/json'); return this.http.get('/restservice/userstatus', {headers: headers}) .map((data: any) => data.json()) .catch(this.handleError); } getUserInfo(): any { …

5
如何延迟创建可观察对象
题 为了进行测试,我创建的Observable对象将实际的http调用返回的可观察值替换为Http。 我的可观察对象是使用以下代码创建的: fakeObservable = Observable.create(obs => { obs.next([1, 2, 3]); obs.complete(); }); 问题是,这个可观察的立即发出。有没有一种方法可以为其发射增加自定义延迟? 跟踪 我尝试了这个: fakeObservable = Observable.create(obs => { setTimeout(() => { obs.next([1, 2, 3]); obs.complete(); }, 100); }); 但这似乎不起作用。

4
将可观察对象中的数组与ngFor和Async Pipe Angular 2一起使用
我试图了解如何在Angular 2中使用Observables。我有此服务: import {Injectable, EventEmitter, ViewChild} from '@angular/core'; import {Observable} from "rxjs/Observable"; import {Subject} from "rxjs/Subject"; import {BehaviorSubject} from "rxjs/Rx"; import {Availabilities} from './availabilities-interface' @Injectable() export class AppointmentChoiceStore { public _appointmentChoices: BehaviorSubject<Availabilities> = new BehaviorSubject<Availabilities>({"availabilities": [''], "length": 0}) constructor() {} getAppointments() { return this.asObservable(this._appointmentChoices) } asObservable(subject: Subject<any>) { return new …

4
Promise.all与RxJS Observables的行为?
在Angular 1.x中,有时我需要发出多个http请求并对所有响应进行处理。我将所有的承诺都放在一个数组中并调用Promise.all(promises).then(function (results) {...})。 Angular 2最佳实践似乎指向使用RxJSObservable代替http请求中的Promise 。如果我从http请求创建了两个或多个不同的Observable,那么是否有等效于的Promise.all()?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.