Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Typescript:用于赢得的循环内对象';无法识别对象';s属性_Angular_Typescript_Properties_For In Loop - Fatal编程技术网

Angular Typescript:用于赢得的循环内对象';无法识别对象';s属性

Angular Typescript:用于赢得的循环内对象';无法识别对象';s属性,angular,typescript,properties,for-in-loop,Angular,Typescript,Properties,For In Loop,我正在使用for in循环查看名为allMeetings的会议对象列表。此循环正在填充另一个名为allEvents的列表,其中除会议之外的对象将以。在该循环中,我试图获取Meeting对象的属性,但它们无法识别。我想知道如何解决或绕过它 我的会议模式: TS文件: 循环用于makeEvents()方法 因此,无法识别会议的日期、描述和id。 编辑1:在TS文件中添加了构造函数 编辑2:我正在从RejectionDB检索数据,因此没有JSON文件,但这里有一个日志来证明Meeting对象实际上不是

我正在使用
for in
循环查看名为
allMeetings
的会议对象列表。此循环正在填充另一个名为
allEvents
的列表,其中除会议之外的对象将以。在该循环中,我试图获取Meeting对象的属性,但它们无法识别。我想知道如何解决或绕过它

我的会议模式:

TS文件:
循环用于
makeEvents()
方法

因此,无法识别会议的日期、描述和id。

编辑1:在TS文件中添加了构造函数
编辑2:我正在从RejectionDB检索数据,因此没有JSON文件,但这里有一个日志来证明Meeting对象实际上不是空的:

date: "Fri Feb 20 1993 00:00:00 GMT+00:00", description: "meeting about dummy data", id: "088c0baf-3c02-48b2-a072-65905fb0c0a7"

将您的代码更改为此

ngOnInit() {
    this.loadMeetings();
}

loadMeetings(): void {
    this._meetingsService.getAllMeetings().subscribe(
        (allMeetings: Meeting[]) => {
            this.allMeetings = allMeetings;
            // you should call this function once 
            // we get the data in this.allMeetings
            this.makeEvents();
        }
    );
}

将您的代码更改为此

ngOnInit() {
    this.loadMeetings();
}

loadMeetings(): void {
    this._meetingsService.getAllMeetings().subscribe(
        (allMeetings: Meeting[]) => {
            this.allMeetings = allMeetings;
            // you should call this function once 
            // we get the data in this.allMeetings
            this.makeEvents();
        }
    );
}

有趣的是,每个人都忽略了这样一个事实,即您正在使用一个对象列表进行迭代,并尝试使用键作为对象本身

这就是为什么TypeScript“无法识别”它的属性。如果要在中使用,请执行以下操作:

for (let meeting in this.allMeetings) {
    this.allEvents.push({
        start: startOfDay(this.allMeetings[meeting].date),
        //...
    });
}
我宁愿使用


关于异步代码的另一个答案对于运行时执行仍然有效,但这不是您在这里要问的问题。

有趣的是,每个人都忽略了这样一个事实,即您正在使用对象列表迭代对象,并试图将键用作对象本身

这就是为什么TypeScript“无法识别”它的属性。如果要在中使用,请执行以下操作:

for (let meeting in this.allMeetings) {
    this.allEvents.push({
        start: startOfDay(this.allMeetings[meeting].date),
        //...
    });
}
我宁愿使用


关于异步代码的另一个答案对于运行时执行仍然有效,但这不是您在这里要问的问题。

您需要像建议的那样操作回调内部的数据。下面是一个有用的问题:

如前所述,您将使用键作为对象,如建议的,使用
forEach
。因此,首先执行
loadMeetings
并在回调调用
makeEvents
中执行:

ngOnInit(){
这是loadMeetings();
}
loadMeetings():void{
此._meetings服务.getAllMeetings()
.订阅((所有会议:会议[])=>{
this.allMeetings=所有会议;
这是makeEvents();
});
}
然后您的
makeEvents
将如下所示:

makeEvents():void{
this.allMeetings.forEach((x:Meeting)=>{
这个,推({
开始日期:开始日期(x.date),
标题:x.description,
颜色:颜色。黄色向日葵,
键入:“会议”,
id:x.id,
})
})
}
那么它应该可以正常工作,这里有一个


您需要像建议的那样操作回调中的数据。下面是一个有用的问题:

如前所述,您将使用键作为对象,如建议的,使用
forEach
。因此,首先执行
loadMeetings
并在回调调用
makeEvents
中执行:

ngOnInit(){
这是loadMeetings();
}
loadMeetings():void{
此._meetings服务.getAllMeetings()
.订阅((所有会议:会议[])=>{
this.allMeetings=所有会议;
这是makeEvents();
});
}
然后您的
makeEvents
将如下所示:

makeEvents():void{
this.allMeetings.forEach((x:Meeting)=>{
这个,推({
开始日期:开始日期(x.date),
标题:x.description,
颜色:颜色。黄色向日葵,
键入:“会议”,
id:x.id,
})
})
}
那么它应该可以正常工作,这里有一个


在loadMeetings()完成运行之前调用makeEvents()。因此,makeEvents()中的allMeetings对象中没有数据@Amit Chigadani的可能重复项的可能重复项-在执行代码时,我确实还必须考虑异步编程,但问题是我无法读取Meeting对象的属性。@WouterVanherck这是因为
Meeting
未定义的
makeEvents
方法。查看链接以了解在loadMeetings()完成运行之前调用.makeEvents()的原因。因此,makeEvents()中的allMeetings对象中没有数据@Amit Chigadani的可能重复项的可能重复项-在执行代码时,我确实还必须考虑异步编程,但问题是我无法读取Meeting对象的属性。@WouterVanherck这是因为
Meeting
未定义的
makeEvents
方法。查看链接以了解原因。如果我的问题不够清楚,我很抱歉。我还没有考虑异步编程,只是想知道为什么typeScript不能识别这些属性。或者这些是相关的?@Wouter Vanherck是的,它们是相关的,用某个类声明一个对象不会给出该类本身的原型。因此for循环中的meeting变量肯定是未定义的,因为在observable返回之前,allMeetings对象本身将是未定义的,但这并没有改变以下事实:类型“string”上不存在
属性“id”
,包括其他属性的错误。在Meeting类中,将id:number更改为字符串或更改此id:parseInt(Meeting.id)。@VivekDoshi a表示为字符串,因此不必担心更改它。如果我的问题不够清楚,我很抱歉。我还没有考虑异步编程,只是想知道为什么typeScript不能识别这些属性。或者这些是相关的?@Wouter Vanherck是的,它们是相关的,用某个类声明一个对象不会给出该类本身的原型。所以for循环中的meeting变量肯定是未定义的,因为在observable返回它之前,allMeetings对象本身将是未定义的,但这并没有改变
属性“id”的情况