'Observable' 유형에 'filter' 속성이 없습니다.
안녕하세요 저는 라우터 3.0으로 Angular 2 final을 사용하고 있습니다.다음에서 내보내는 이벤트를 필터링합니다.this.router.events
내가 하고 싶은 일:
import 'rxjs/operator/filter';
//...
this.router.events
.filter((event:Event) => event instanceof NavigationEnd)
.subscribe(x => console.log(x))
event
인스턴스OF일 수 있습니다.NavigationEnd
,NavigationStart
아니면RoutesRecognized
하지만 난 오직NavigationEnd
. 하지만 나는 오류가 발생합니다.
Property 'filter' does not exist on type Observable<Event>
컴파일 타임 중에
전체를 수입할 때rxjs
라이브러리 오류가 사라집니다.전체 rxjs 라이브러리를 로드하지 않고 작동하려면 무엇을 가져와야 합니까?
갱신하다
위해서RXJS 5.x
버전:
import 'rxjs/add/operator/filter';
위해서RXJS 6.x
버전:
import { filter } from 'rxjs/operators';
다음 규칙은 자바스크립트 개발자들이 가져오기 경로를 재팩터링하는 것을 돕기 위해 RxJS 팀에 의해 설계되었습니다.
rxjs/operators
: 파이프링 가능한 연산자가 모두 들어 있습니다.
import { map, filter, scan } from 'rxjs/operators';
rxjs
: 작성 방법, 유형, 스케줄러 및 유틸리티를 포함합니다.
import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent } from 'rxjs';
이 시나리오에는 몇 가지 수정 사항이 있습니다.
1) 파이프형 연산자 사용
pipeable 연산자는 rxjs/add/operator/*에서 볼 수 있는 "patch" 연산자보다 필요한 연산자만 끌어오기 위한 더 나은 접근 방식입니다.
import { filter } from 'rxjs/operators';
// ..
this.router.events.pipe(
filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x))
2) 'rxjs/add/operator/filter' 사용
가져오기 문을 다음으로 변경합니다.import 'rxjs/add/operator/filter'
. 수정합니다.Observable.prototype
덧붙이기filter
메서드를 Observable 클래스의 모든 인스턴스에 적용합니다.
다음 두 가지 결과가 있습니다.
- 응용 프로그램별로 한 번만 가져오기 문을 실행하기에 충분합니다.
- 공유 라이브러리/npm 패키지에서는 라이브러리 소비자에게 약간의 혼란을 가져올 수 있습니다(
filter()
method는 마법처럼 아래에 나타날 것입니다.Observable
도서관 이용 중)
3) 연산자 가져오기는 그대로 두되 호출 방식을 변경합니다.
성명서import 'rxjs/operator/filter'
완벽하게 유효합니다.연산자만 가져올 것입니다.이 접근 방식은 다음과 같은 문제를 해결하지 못할 것입니다.Observable.prototype
. 단점으로는 여러 운영자를 연결하는 것이 더 어려워질 것입니다.
import 'rxjs/operator/filter'; // This is valid import statement.
// It will import the operator without
// modifying Observable prototype
// ..
// Change how the operator is called
filter.call(
this.router.events,
(event:Event) => event instanceof NavigationEnd
).subscribe(x => console.log(x));
더 자세한 정보: 파이프 가능 연산자
Angular Update(5.x ~ 6.x)는 rxjs를 5.x에서 6.x로 업데이트할 때도 함께 제공되므로 간단히 추가합니다.
import { filter } from 'rxjs/operators';
그리고나서
this.router.events.pipe(
filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x))
누군가에게 도움이 되기를 바랍니다.
Angular 6 업그레이드로 Rxjs 6로 업데이트 후.
import { map, filter, scan } from 'rxjs/operators';
...
this.registrationForm.valueChanges
.pipe(
filter(() => this.registrationForm.valid),
map((registrationForm: any) => {
this.registrationVm.username = registrationForm.username;
this.registrationVm.password = registrationForm.password;
this.registrationVm.passwordConfirm = registrationForm.passwordConfirm;
})
)
.subscribe();
가장 쉽게 해결할 수 있는 방법은
npm install rxjs-compat
어떤 버전의 차이라도 마법처럼 사라지게 해줄 겁니다!
참고:
위 답변들이 다루지 못한 몇 가지를 언급하고자 합니다.
RxJs는 독립 실행형 라이브러리이며, 이 경우의 연산은 독립 실행형 메서드이기도 합니다. 맵, 필터 등은 개체를 통해 액세스할 수 없는 연산자 메서드입니다.당신은 그것들을 따로 가져온다는 것을 기억하세요.
예를 들어 당신은 할 수 없습니다.import { filter}
인터넷을 통해 접속하고 싶습니다.router
물건.그것은 절대로 작동하지 않을 것입니다. 왜냐하면 a.router
object는 API의 어딘가에 있는 각도별 클래스 인스턴스입니다.각도는 다음을 제공합니다.pipe()
다음 방법으로 이동하기 전에 프로세스에서 체인으로 연결되어야 하는 방법을 등록할 수 있도록 허용하는 method.router
그것은 그 일부가 아닙니다.router
물건.
항상 기억하세요
transform(value: any, args?: any): unknown {
if(!args)
return value;
return value.filter(item => item.title)
}
transform(value: any, args?: any): unknown {
if(!args)
return value;
return value.filter(item => item.title)
}
show filter error 는 주로 이렇게 사용합니다.value:any
완벽하게 작동하고 있습니다.
여기서 이벤트 유형 -> .filter((이벤트:이벤트)
언급URL : https://stackoverflow.com/questions/39514564/property-filter-does-not-exist-on-type-observableevent
'IT' 카테고리의 다른 글
MySql이 mysql 서버를 다시 시작한 후 사용자 암호를 재설정합니다. (0) | 2023.10.20 |
---|---|
제로패딩이 없는 Python 데이트 타임 포맷 (0) | 2023.10.20 |
tiny_mce_before_init를 사용하여 wordpress용 tiny MCE를 사용하는 사용자 정의 스타일로, 선택 항목을 중심으로 div를 추가하는 대신 각 목록 항목에 스타일을 추가합니다. (0) | 2023.10.20 |
string.Lower() 및 string에 연결합니다.아래쪽으로불변() (0) | 2023.10.20 |
상품을 추가할 때 wocommerce 상품 페이지에서 사용자 지정 필드 값을 필수(필수)로 만들려면 어떻게 해야 합니까? (0) | 2023.10.20 |