คำถามติดแท็ก observable

โดยทั่วไปแล้วสิ่งที่สังเกตได้คือโครงสร้างการเขียนโปรแกรมที่ส่วนอื่น ๆ ของโค้ดสามารถ "เฝ้าดู" ได้ซึ่งเรียกว่า "ผู้สังเกตการณ์" เฟรมเวิร์กและภาษาการเขียนโปรแกรมที่แตกต่างกันมีการใช้งานที่แตกต่างกันสำหรับสิ่งที่สังเกตได้ดังนั้นโดยทั่วไปควรใช้แท็กนี้ร่วมกับแท็กอื่น ๆ

21
Angular / RxJs ฉันควรยกเลิกการสมัครเมื่อ
ฉันควรจัดเก็บ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 …

7
การมอบหมาย: EventEmitter หรือสังเกตได้ในเชิงมุม
ฉันพยายามที่จะใช้งานบางอย่างเช่นรูปแบบการมอบหมายใน Angular เมื่อผู้ใช้คลิกที่ a 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 ' + …

10
เมื่อใดที่เราควรใช้นักสังเกตการณ์และสังเกตได้
ผู้สัมภาษณ์ถามฉัน: คืออะไรObserverและObservableและเมื่อเราควรใช้พวกเขา? ฉันไม่ทราบข้อกำหนดเหล่านี้ดังนั้นเมื่อฉันกลับถึงบ้านและเริ่ม Googling เกี่ยวกับObserverและObservableฉันพบบางจุดจากแหล่งข้อมูลที่แตกต่างกัน: 1) Observableเป็นคลาสและObserverเป็นอินเทอร์เฟซ 2) Observableระดับเก็บรายการของObservers 3) เมื่อมีการObservableอัปเดตวัตถุวัตถุจะเรียกใช้update()วิธีการของแต่ละวัตถุObserverเพื่อแจ้งว่ามีการเปลี่ยนแปลง ฉันพบตัวอย่างนี้: 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); } …

11
ส่งคืน Observable ที่ว่างเปล่า
ฟังก์ชั่นmore()ควรจะส่งกลับObservableจากการขอ 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()เป็นจริงเท่านั้นฉันได้รับข้อผิดพลาดจากsubscribe()ฟังก์ชันsubscribe is not definedฉันจะคืนค่าว่างที่สังเกตได้อย่างไร this.collection.more().subscribe( (res) =>{ console.log(res); …

7
ความแตกต่างระหว่าง Java 8 สตรีมและ RxJava ที่สังเกตได้
Java 8 สตรีมคล้ายกับ RxJava หรือไม่ การกำหนดสตรีม Java 8: คลาสในjava.util.streamแพ็คเกจใหม่มี Stream API เพื่อรองรับการทำงานในรูปแบบการใช้งานในส่วนขององค์ประกอบ

6
การสร้างและส่งคืน Observable จาก Angular 2 Service
นี่เป็นคำถาม "แนวทางปฏิบัติที่ดีที่สุด" มากกว่า มีผู้เล่นสามคน: a Component, 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สามารถสร้างอาร์เรย์นี้ในวิธีสมัครสมาชิกได้ แต่ฉันคิดว่ามันจะสะอาดกว่าถ้าบริการทำเช่นนั้นและทำให้พร้อมใช้งานสำหรับไฟล์Component. จะServiceสร้างObservableอาร์เรย์ใหม่ที่มีอาร์เรย์นั้นและส่งคืนได้อย่างไร

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
จะสร้าง Observable จากข้อมูลคงที่คล้ายกับ http one ใน Angular ได้อย่างไร
ฉันมีบริการที่มีวิธีการนี้: 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
ฉันจะส่งคืนการตอบสนองจากการเรียก Observable / http / async ในเชิงมุมได้อย่างไร
ฉันมีบริการที่ส่งคืนค่าที่สังเกตได้ซึ่งส่งคำขอ 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 …

8
วิธีตรวจสอบความยาวของอาร์เรย์ที่สังเกตได้
ในองค์ประกอบ Angular 2 ของฉันฉันมีอาร์เรย์ที่สังเกตได้ 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 array อัปเดต: ดูเหมือนว่า(list $ | async) ?. lengthทำให้เรามีความยาว แต่โค้ดด้านล่างยังใช้ไม่ได้: <div> Length: {{(list$ | async)?.length}} <div *ngIf="(list$ | async)?.length>0"> <ul> <li *ngFor="let …

5
Angular 4+ ngOnDestroy () ในการให้บริการ - ทำลายที่สังเกตได้
ในแอปพลิเคชันเชิงมุมเรามีngOnDestroy()ตะขอเกี่ยวกับวงจรชีวิตสำหรับส่วนประกอบ / คำสั่งและเราใช้ตะขอนี้เพื่อยกเลิกการเป็นสมาชิกสิ่งที่สังเกตได้ ฉันต้องการล้าง / ทำลายที่สังเกตได้ซึ่งสร้างขึ้นใน@injectable()บริการ ฉันเห็นบางกระทู้บอกว่าngOnDestroy()สามารถใช้ในบริการได้เช่นกัน แต่มันเป็นแนวทางปฏิบัติที่ดีและเป็นวิธีเดียวที่จะทำได้และเมื่อไหร่จะเรียก? ใครบางคนโปรดชี้แจง

1
การเชื่อมโยง RxJS Observables จากข้อมูล http ใน Angular2 ด้วย TypeScript
ฉันกำลังพยายามสอนตัวเอง Angular2 และ TypeScript หลังจากทำงานกับ AngularJS 1 อย่างมีความสุขในช่วง 4 ปีที่ผ่านมา! ฉันต้องยอมรับว่าฉันเกลียดมัน แต่ฉันแน่ใจว่าช่วงเวลาที่ยูเรก้าของฉันอยู่ใกล้แค่เอื้อม ... อย่างไรก็ตามฉันได้เขียนบริการในแอปจำลองของฉันที่จะดึงข้อมูล http จากแบ็กเอนด์ปลอมที่ฉันเขียนซึ่งให้บริการ JSON 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', …

4
การใช้อาร์เรย์จากวัตถุที่สังเกตได้ด้วย ngFor และ Async Pipe Angular 2
ฉันพยายามทำความเข้าใจวิธีใช้ Observables ใน Angular 2 ฉันมีบริการนี้: 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: …

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); }); แต่ดูเหมือนจะไม่ได้ผล

10
จะทำให้ลำดับที่สังเกตได้หนึ่งอันต้องรอให้อีกลำดับหนึ่งเสร็จสมบูรณ์ก่อนที่จะเปล่งออกมา?
สมมติว่าฉันมีObservableดังนี้: var one = someObservable.take(1); one.subscribe(function(){ /* do something */ }); จากนั้นฉันมีวินาทีObservable: var two = someOtherObservable.take(1); ตอนนี้ผมต้องการที่จะsubscribe()ไปtwoแต่ฉันต้องการเพื่อให้แน่ใจว่าoneได้เสร็จสิ้นก่อนที่จะมีtwoสมาชิกเป็นเชื้อเพลิง ฉันสามารถใช้วิธีการบัฟเฟอร์แบบใดtwoเพื่อให้อันที่สองรอให้อันแรกเสร็จสมบูรณ์ ฉันคิดว่าฉันต้องการหยุดชั่วคราวtwoจนกว่าoneจะเสร็จสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.