【发布时间】:2017-12-18 23:22:41
【问题描述】:
我正在使用 Firebase 开发 Angular2 项目。
我需要将所有查询结果推送到this.guestPush中的同一个键下。
我有一个包含不同用户级别的多选元素。 4、6、9。
选择一个级别时,生成的对象将保存在guestPush阵列中,但选择另一个级别时会发生以下错误。
我收到此错误:
ERROR TypeError: this.guestPush[("filter" + i)].push 不是函数
这是我的代码:
guestPush: any[] = new Array;
level.forEach((lvl, index) => {
this.db.object(`levelsUsers/${lvl}/users`)
.subscribe(users => {
if (this.guestPush['filter_' + i]) {
this.guestPush['filter_' + i].push(users);
} else {
this.guestPush['filter_' + i] = users;
}
}, err => console.log(err));
});
编辑***
包含匹配过滤器的用户的用户对象:
Object {-KmSjAaxdCUvrPEQ8InI: Object, $key: "users", $exists: function}
-KmSjAaxdCUvrPEQ8InI: Object
admin:"false"
description:"desc"
...
...
verified:false
__proto__:Object
exists:function ()
$key:"users"
__proto__:Object
而this.guestPush[i] = users; 创建一个像这样的对象:
[Object]
0:Object
-KmSjAaxdCUvrPEQ8InI: Object
admin:"false"
description:desc"
...
...
verified:false
__proto__:Object
$exists:function ()
$key:"users"
__proto__:Object
length:1
__proto__:Array(0)
因此,在下一个循环中,我想在 -KmSjAaxdCUvrPEQ8InI 旁边添加任何新的用户对象,或者只要将其添加为 0 键的值即可。
【问题讨论】:
-
您有“this.db.object”这一行,也许将其更改为列表订阅会有所帮助?如果您使用的是 angularfire,那将返回一个对象,因此没有推送方法。 Reference
-
因为这里的一切都是箭头函数,我有点迷失了
this,guestPush是变量还是属性? -
这是一个属性。
-
Typescipt 支持来自 JS 的未来功能。其中之一是地图。您可以重写代码而不将数组视为地图。它将对您更具可读性和透明性
-
“我”从何而来?你的意思是“索引”吗?
标签: javascript arrays angular typescript