gpt4 book ai didi

typescript - 使用 ngOnInit() 而不是构造函数; @Input() 未定义

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:49 25 4
gpt4 key购买 nike

首先,如果这是糟糕的设计,我非常乐意改变。

在我的 index.html 中,我在主体中有:

<month [year]="2016" [monthOfYear]="4">Loading...</month>

month.component.ts 然后是:

import { Component, Input, OnInit } from '@angular/core';
import { DayComponent } from '../day/day.component';
import * as Models from '../../../models/_models';

@Component({
selector: 'month',
moduleId: module.id,
templateUrl: 'month.component.html',
styleUrls: ['month.component.css'],
directives: [DayComponent]
})

export class MonthComponent {
name: string;
days: Models.Day[];
@Input('year') year: number;
@Input('monthOfYear') monthOfYear: number;
month: Models.Month;

ngOnInit() {
this.month = new Models.Month(this.year, this.monthOfYear);
this.name = this.month.getMonthName();
this.days = this.month.days;
}
}

...并且 ngOnInit() 被正确调用。但是在调用时(或者可能曾经,但我不知道如何确定)yearmonthOfYear 都是 undefined

如何确保值在 ngOnInit() 中传递,或者是否有更好的模式来完成此操作?

最佳答案

所以这实际上很简单,但从教程/文档中看不清楚。

解决方法如下:

<month year="2016" monthOfYear="4">Loading...</month>

属性周围的方括号表示组件应将这些属性视为父组件的数据绑定(bind)。因此,如果您想从父级传递这些值,您可以执行以下操作:

<month [year]="year" [monthOfYear]="month">Loading...</month>

在您的情况下,您分配的是字符串文字,因此不需要方括号。此外,您应该声明您的组件实现了 OnInit,但这似乎对执行没有任何影响。

关于typescript - 使用 ngOnInit() 而不是构造函数; @Input() 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com