我正在Angular 8项目https://ng-bootstrap.github.io/#/components/typeahead/examples中使用ng-bootstrap中的typeahead元素。我使用的是库示例中给出的函数,但是如果我的输入之一为null,则会出现错误。
我的组件类中有一个使用函数构建的变量:
searchAutofill = (text$: Observable<string>) =>
text$.pipe(
debounceTime(200),
distinctUntilChanged(),
map(term => term.length < 1 ? []
: this.option.filter(v => v.toLowerCase().indexOf(term.toLowerCase()) > -1).slice(0, 15))
)
option是一个字符串数组,例如:
[
"tom",
"bob",
"foo",
"emma",
null,
"john",
"hello",
"example",
当函数达到空值时,它将返回ERROR TypeError: "v is null"
。如何更改代码以接受/忽略空值?
答案 0 :(得分:3)
是的,因为您尝试对'null'值执行String方法。
因此,v.toLowerCase()
在这里您得到null.toLowerCase()
。
无论何时访问对象的任何属性或方法,都必须确保该对象是所需的对象。否则,请设置一些规则进行检查,
在您的情况下,您似乎想检查字符串v
中是否有保存在term
变量中的子字符串。
因此,我猜想如果false
为v
,您想返回null
:
filter(v => v && v.toLowerCase().indexOf(term.toLowerCase()) > -1)
p.s。请注意,这里我只是检查v
是否不是伪造的值。您可能需要添加其他规则,以检查它是否为字符串。例如:
typeof v === 'string'