Elvis运营商(也称为安全导航运营商)应该避免在尝试访问" undefined" JavaScript对象中的方法,对吗?
好吧,也许不是,也许我做错了什么。检查此代码:
<ion-content padding>
<h3>"{{place?.get("placeName")}}" management</h3>
<ion-list>
<ion-item *ngFor="let visit of visitBuffer">
User: {{visit?.get("userId")}}
</ion-item>
</ion-list>
</ion-content>
(是的,它是一个Ionic app,运行Angular 4)。
所以我只想看到每个对象的userId&#34;访问&#34;对于每个项目。应该不是问题吧?我在两个不同的并行查询中加载了visitBuffer的所有信息,这些查询在构造函数中运行:
export class Management {
place;
visitBuffer = [];
constructor(
public navCtrl: NavController,
public navParams: NavParams
) {
const placeId = localStorage.getItem("placeId");
this.getPlace(placeId)
.then( place => {
this.place = place;
// Subscribe to normal Visits
this.subscribeVisits(placeId).then( subscription => {
let s = <any> subscription;
s.on('create', (visit) => {
this.visitBuffer.push(visit);
});
})
// Subscribe to GroupVisits
this.subscribeGroupVisits(placeId).then( subscription => {
let s = <any> subscription;
s.on('create', (visit) => {
this.visitBuffer.push(visit);
});
})
})
}
您在那里看到的方法,只是查询Parse数据库并返回一些对象或数组。他们只是将对象推入&#34; visitBuffer&#34;并将.map函数应用于数组,将其数据重新分配到同一个&#34; visitBuffer&#34;数组比以前。这是使用的,因此两个相似的对象(Visits和VisitGroups)在同一个数组中输入,因为我在我的视图中将与它们同等地工作。
我只是试图获得Parse方法&#34; .get(property)&#34;,所以我可以得到两种类型的对象都具有的属性usedId。我甚至使用了elvis运算符,但是......无论如何都会抛出错误:
VM1194 Management.ngfactory.js:13 ERROR TypeError: _v.context.$implicit.get is not a function
at Object.eval [as updateRenderer] (VM174 Management.ngfactory.js:15)
at Object.debugUpdateRenderer [as updateRenderer] (VM82 vendor.js:13488)
at checkAndUpdateView (VM82 vendor.js:12632)
at callViewAction (VM82 vendor.js:12995)
at execEmbeddedViewsAction (VM82 vendor.js:12953)
at checkAndUpdateView (VM82 vendor.js:12628)
at callViewAction (VM82 vendor.js:12995)
at execComponentViewsAction (VM82 vendor.js:12927)
at checkAndUpdateView (VM82 vendor.js:12633)
at callViewAction (VM82 vendor.js:12995)
我做错了什么......?当我使用elvis运算符时为什么视图会崩溃?
答案 0 :(得分:1)
我过去遇到过类似的问题。查看*ngIf
是否有帮助:
<ion-list *ngIf="visitBuffer">
<ion-item *ngFor="let visit of visitBuffer">
User: {{visit.get("userId")}}
</ion-item>
</ion-list>
答案 1 :(得分:0)
好的,我解决了这个问题,尽管我刚刚意识到有关猫王操作员的一个有趣的事实。
我瞄准的变量(usedId),对于类型&#34; GroupVisit&#34;而言并不存在,所以当该类型的一个对象到达时,它就崩溃了。事实上,似乎elvis运算符似乎首先检查变量的类型,然后对来自数组的每个值应用相同的规则。
我认为elvis运算符会检查每个对象中的空值,但它只是在第一个看起来。我不得不对我如何填充&#34; visitBuffer&#34;进行一些修改。所以我不再解决这个问题了:我可以使用不同的数组,或者只是将属性添加到GroupVisit对象中。第二种选择很有效。
无论如何,对于像这样的情况,我们有一个动态类型的数组,我们应该有一些类型的&#34;循环elvis运算符&#34;检查循环的每次迭代中的空值,而不仅仅是第一个对象。