我正在尝试使用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>
我期望过滤的结果是搜索功能可以从数据库中过滤名称和主题。
答案 0 :(得分:0)
将您的条件更新为:
if (v.displayName && v.displayName.toLowerCase()...
如果您尝试调用方法(在本例中为toLowerCase
)或访问null
或undefined
对象上的属性,通常会出现该错误。这基本上是Javascript的null reference exception
版本。
通过检查v.displayName
,您确保对象displayName
上存在属性v
,其值不是undefined
或null
。
如果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;
})}