输入为null时,ngbtypeahead函数返回TypeError

时间:2019-11-11 15:53:40

标签: javascript angular typescript ng-bootstrap

我正在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"。如何更改代码以接受/忽略空值?

1 个答案:

答案 0 :(得分:3)

是的,因为您尝试对'null'值执行String方法。

因此,v.toLowerCase()在这里您得到null.toLowerCase()

无论何时访问对象的任何属性或方法,都必须确保该对象是所需的对象。否则,请设置一些规则进行检查,

在您的情况下,您似乎想检查字符串v中是否有保存在term变量中的子字符串。

因此,我猜想如果falsev,您想返回null

filter(v => v && v.toLowerCase().indexOf(term.toLowerCase()) > -1)

p.s。请注意,这里我只是检查v是否不是伪造的值。您可能需要添加其他规则,以检查它是否为字符串。例如:

typeof v === 'string'