IT이야기

관측 가능한 구역으로 이동.js

cyworld 2022. 3. 11. 22:27
반응형

관측 가능한 구역으로 이동.js

각진 곳에 위치할 수 있는 GPS 플러그인이 있어따라서 변화는 각도에 의해 감지되지 않고 뷰가 동일한 값으로 고정된다.

물론 나는 관제사로부터 관찰할 수 있는 이 글을 구독하고 그런 일을 할 수 있었다.

$mySourceOutOfZone.subscribe((value)=>{
            this.zone.run(() => {
                this.value = value;
            });
})

그리고 이 뷰는 다음과 같은 값을 사용할 것이다.

<span>{{value}}</span>

하지만 나는 콘트롤러에 가입하지 않아도 되고 명령형 방식을 사용하지 않았으면 좋겠어.

어떻게 내가 이것을 관찰할 수 있는 각 영역 안에서 달릴 수 있을까?

RxJs 6+를 사용하는 경우, 사용자 정의 파이프 연산자는 관찰 가능한 동작을 다음 중 하나로 포장할 수 있다.zone.run()지정된 구역에 대해

import { Observable, OperatorFunction } from 'rxjs';
import { NgZone } from '@angular/core';

export function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {
  return (source) => {
    return new Observable(observer => {
      const onNext = (value: T) => zone.run(() => observer.next(value));
      const onError = (e: any) => zone.run(() => observer.error(e));
      const onComplete = () => zone.run(() => observer.complete());
      return source.subscribe(onNext, onError, onComplete);
    });
  };
}

그러면 운영자는 관찰 가능한 영역에 추가될 수 있으며, 사용자는 구역 컨텍스트를 변경할 시기를 명시적으로 알 수 있다.

return exampleObservable.pipe(
  runInZone(this.zone)
);

rxjs영역 전용 플러그인이 있는 것 같다.

다음과 같이 rxjs 스트림에 영역을 바인딩할 수 있다.

.enterZone(this.ngZone)

또는 파이프 연산자 사용:

.pipe(enterZone(this.ngZone))

이 패치를 사용해 볼 수도 있다.내부에 이 줄 추가polyfills.ts수입후zone.js.

import `zone.js/dist/zone-patch-rxjs`;

그렇게subscription callback부르면 구역에서 달릴 거야.subscribe.

참조URL: https://stackoverflow.com/questions/50928645/running-an-observable-into-a-zone-js

반응형