javascript - როგორ ავიცილოთ 'any'-ის გამოყენება When using FromEvent RxJS Angular-თან ერთად, რომ შევიძინოთ input ტეგის მნიშვნელობის ცვლილებებზე გამოწერა?
მე ვერ ვუსაზღვრავ კონკრეტულ ტიპს, როცა ვხმარობ FromEvents RxJS-დან. როცა ვადნობ 'keyup'-ის მოვლენას და ვაკეთებ მასში map-ს, რომ მივიღო შეყვანილი მნიშვნელობა, შემიძლია გამოიყენო მხოლოდ (e: any => return (e.target!).value;). მიუხედავად იმისა, რომ ბრაუზერის დებაგერები ამოწმებენ, რომ e არის KeyboardEvent, თუ გავუსაზღვრებ e: KeyboardEvent მივიღებ შეცდომას, რომელიც ამბობს, რომ "e არ შეიცავს თვისებას target". არსებული კოდი მუშაობს, თუმცა, რადგან მე ახალი ვარ RxJS + Angular-ში, და საზოგადოება ყოველთვის ურჩევს any-ის გამოყენების თავიდან აცილებას, მაინტერესებს, რა შემიძლია გავაკეთო, რომ ამ სიტუაციაში არასაჭირო გახდეს მისი გამოყენება?
Component.ts
import { TagInterface } from './../../../interfaces/tag/tag-interface';
import { Component, OnInit, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
import { fromEvent, Observable } from 'rxjs';
@Component({
selector: 'app-tag-search-bar',
templateUrl: './tag-search-bar.component.html',
styleUrls: ['./tag-search-bar.component.scss']
})
export class TagSearchBarComponent implements OnInit,AfterViewInit {
@Output() tags = new EventEmitter<TagInterface[]>();
@ViewChild('tagInput') tagInputChild!: ElementRef;
mappedAndFilteredInput!: Observable<any>;
eventKeyUp! : Observable<any>;
constructor() { }
ngOnInit(): void {
}
ngAfterViewInit() {
this.eventKeyUp = fromEvent(this.tagInputChild.nativeElement, 'keyup');
this.mappedAndFilteredInput = this.eventKeyUp.pipe(
map((e: any) => {
return (e.target!).value;
}),
debounceTime(100),
distinctUntilChanged(),
filter(value => (value != "" && value != undefined))
);
this.mappedAndFilteredInput.subscribe(
value => console.log(value),
error => console.log(`error: ${error}`),
() => console.log('completed maping and filtering tag input term'));
}
}
HTML
<div class="input-group-prepend">
<span class="input-group-text">
<i class="far fa-filter"></i>
</span>
</div>
<input #tagInput type="text" class="filter-tag-list">
პასუხი #1
ეს არის ტიპის უსაფრთხო გზა KeyboardEvent-დან target მიღებისათვის
fromEvent<KeyboardEvent>(document.documentElement, 'keyup').subscribe(e => {
const [target] = e.composedPath()
console.log(target)
})
თუმცა, თქვენს შემთხვევაში უფრო მარტივი იქნება უბრალოდ გააკეთოთ
fromEvent(this.tagInputChild.nativeElement, 'keyup').subscribe(_ => {
console.log(this.tagInputChild.nativeElement.value)
})
ან უკეთესია გამოიყენოთ ფორმის კონტროლი და ისმინოთ valueChanges ფორმის კონტროლზე.
