【问题标题】:Using ngOnInit() instead of a constructor; @Input() undefined使用 ngOnInit() 而不是构造函数; @Input() 未定义
【发布时间】:2016-09-22 08:29:18
【问题描述】:

首先,如果这是一个糟糕的设计,我很乐意做出改变。

在我的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() 中传递值,或者是否有更好的模式来实现这一点?

【问题讨论】:

    标签: typescript angular angular2-template angular2-components


    【解决方案1】:

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

    解决办法如下:

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

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

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

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

    【讨论】:

    • 你也可以添加&lt;month [year]="'2016'" [monthOfYear]="'4'"&gt;Loading...&lt;/month&gt;,这比&lt;month year="2016" monthOfYear="4"&gt;Loading...&lt;/month&gt; 更喜欢Angular2“神奇地”加载属性值到属性。
    【解决方案2】:

    如果我理解正确,您尝试将一些值从 index.html 传递给一个组件(在这种情况下成为根组件)。我不确定这是否可行,因为 Angular 由根组件引导并且无法提供 index.html(这是托管 Angular 的页面)。

    通常在 index.html 中你有一个根(比如 AppComponent)。 AppComponent 包含您的组件(例如 MonthComponent)。 AppComponent 可以将值传递给 MonthComponent。

    希望对你有帮助

    猜你喜欢
    • 2018-01-14
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多