【问题标题】:Angular2: Visibility of Input-propertiesAngular2:输入属性的可见性
【发布时间】:2018-03-13 05:34:49
【问题描述】:

我有一个组件父级,它使用输入属性调用另一个组件子级。

该属性在子模板中可用,但在构造函数或 OnInit 中不可用。这是正常行为还是我做错了什么?

parent.component.ts

import {Component} from '@angular/core';

@Component({
  selector: "parent",
  template: `<child [name]="'foobar'"></child>`
})

export class ParentComponent
{
}

child.component.ts

import {Component, Input, OnInit} from '@angular/core';

@Component({
  selector: "child",
  template: "name={{ name }}"
})

export class ChildComponent
{
  @Input () name:string="init";

  constructor ()
  {
    console.log ("constr: " + name);
  }

  ngOnInit ()
  {
    console.log ("oninit: " + name);
  }
}

编辑

  • 更正了我的示例并将@Input 放入类中。

  • 将我的示例更改为真实代码。 模板显示“foobar”,控制台显示一个空字符串。

【问题讨论】:

  • 不一定要立即设置,如果你想访问值实现 OnChanges。另请注意,您可以为字符串值执行 name=“test”
  • 并且用 Input() 修饰的名称必须在类中。你为什么不发布一个完整的、真实的、最小的例子而不是一些伪代码。我们可以重现问题,而不必猜测可能是什么问题。
  • 在将 name 更改为 this.name 后无法重现(但同样,是因为此错误在您的代码中并且您忽略了 TypeScript 错误,还是因为您发布的内容是伪的代码?)plnkr.co/edit/8V86k9JQ5ZyDnZCCHgDt?p=preview

标签: angular typescript


【解决方案1】:

改变

console.log ("oninit: " + name);

console.log ("oninit: " + this.name);

【讨论】:

  • 好吧,看来我倒霉了。对于我忘记“this”的任何属性,我都会得到一个 compiler.error。 (我做了什么以及它在 onInit 中没有值的原因是什么)但不适用于名为“name”的属性......是属性的保留名称还是什么??
  • lib.es6.d.ts 定义了declare const name: never;。不过,我不知道这个全局常量是什么。
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 2015-12-07
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2016-12-10
  • 1970-01-01
相关资源
最近更新 更多