【发布时间】:2020-01-23 05:22:19
【问题描述】:
我正在浏览 Angular 文档并看到以下代码 sn-p。在我的脑海里,我想我记得在 Angular 中使用 document.getElementById() 是不受欢迎的,甚至不鼓励使用 ElementRefs (以帮助防止 XSS 攻击)。如果确实不鼓励这些,那么为特定元素上的事件设置 Observable 的最佳实践是什么?
来自Angular Observables Documentation
import { fromEvent } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { map, filter, debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
const searchBox = document.getElementById('search-box'); // <-- Is this OK?
const typeahead = fromEvent(searchBox, 'input').pipe(
map((e: KeyboardEvent) => e.target.value),
filter(text => text.length > 2),
debounceTime(10),
distinctUntilChanged(),
switchMap(() => ajax('/api/endpoint'))
);
【问题讨论】:
-
可以使用模板变量,然后使用
@ViewChild('your template variable name')访问元素。 -
这个答案会对你有所帮助,stackoverflow.com/questions/38944725/…
-
以这种方式使用它的文档中的奇怪样本我猜它“没问题”,然后当样本在官方文档中时:D 我根本不会这样做。我可能会将表单控件附加到输入并收听
valueChanges。