错误TypeError:无法读取未定义的属性'toLowerCase'。离子3

时间:2017-12-05 17:47:19

标签: javascript ionic-framework ionic3

我正在尝试使用angular来过滤来自firebase数据库的数据。但是它会像以前一样得到错误 - 错误TypeError:无法读取undefined的属性'toLowerCase'。有人可以帮我吗?下面是我在search.ts中的函数

searchuser(searchbar) {


this.filteredusers = this.temparr;
var q = searchbar.target.value;

if (q.trim() == '') {
  return;
}

this.filteredusers = this.filteredusers.filter((v) => {
  if (v.displayName.toLowerCase().indexOf(q.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(q.toLowerCase()) > -1) {
    return true;
  }

  return false;
})}

以下是我的HTML代码

<ion-content padding>
    <ion-searchbar [(ngModel)]="searchstring" (input)="searchuser($event)" placeholder="Search"></ion-searchbar>
    <ion-list no-lines>
      <ion-list>
        <ion-item-sliding *ngFor="let key of filteredusers" >
          <ion-item >
            <ion-avatar item-left>
              <img src="{{key.photoURL}}">
            </ion-avatar>
            <h2>{{key.displayName}} </h2>
            <p>Rate/Hour:RM{{key.rate}}</p>
            <p>Subject:{{key.subject}}</p>
            <p>Distance:0.5KM</p>

          </ion-item>


          <ion-item-options slide="left">
            <button ion-button color="primary" (click)="call(key)">
              <ion-icon name="call"></ion-icon>
              Call
            </button>
          </ion-item-options>

        </ion-item-sliding>
      </ion-list>
    </ion-list>

</ion-content>

我期望过滤的结果是搜索功能可以从数据库中过滤名称和主题。

5 个答案:

答案 0 :(得分:0)

将您的条件更新为:

if (v.displayName && v.displayName.toLowerCase()...

如果您尝试调用方法(在本例中为toLowerCase)或访问nullundefined对象上的属性,通常会出现该错误。这基本上是Javascript的null reference exception版本。

通过检查v.displayName,您确保对象displayName上存在属性v,其值不是undefinednull

如果displayName属性可能属于string以外的任何类型,那么您可能还会在调用toLowerCase之前对您的属性进行类型检查。它。您可以使用typeof v.displayName === "string"进行类型检查。因此,更完整的检查将是:

if (v.displayName && typeof v.displayName === "string" && v.displayName.toLowerCase()...

答案 1 :(得分:0)

尝试更新您的cordova。

sudo npm install cordova@latest

答案 2 :(得分:0)

问题:无法读取未定义的属性“ toLowerCase”
终于解决了这个问题。这可能会对其他人有所帮助,因为xcode更新确实是新的,并且关于此的信息并不多。 我正在使用iOS平台v4.5.4。显然,xcode 11与list-emulator-build-targets文件中的验证存在一些冲突。 您要做的是:
从Cordova删除ios平台
命令
离子Cordova平台rm ios

命令:
 离子Cordova平台添加ios @ latest

cordova平台添加ios @ latest

这将安装ios v5.0.1,可以在xcode 11上正常运行。

答案 3 :(得分:0)

ERROR TypeError: Cannot read property 'toLowerCase' of undefined.

在为ios构建时在ionic 3中面临通用问题的人

只需删除平台ios,然后添加ios@latest平台

  ionic cordova platform rm ios
  ionic cordova platform add ios@latest

OR

sudo ionic cordova platform rm ios
sudo ionic cordova platform add ios@latest

答案 4 :(得分:0)

这是错误

this.filteredusers = this.filteredusers.filter((v) => {
  if (v.displayName.toLowerCase().indexOf(q.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(q.toLowerCase()) > -1) {
    return true;
  }

  return false;
})}

'q'更改为'v'

  this.filteredusers = this.filteredusers.filter((v) => {
      if (v.displayName.toLowerCase().indexOf(v.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(v.toLowerCase()) > -1) {
        return true;
      }

      return false;
    })}