【问题标题】:How to pass data from parent to child components?如何将数据从父组件传递到子组件?
【发布时间】:2017-01-21 09:04:24
【问题描述】:

我在子组件中有这个属性:

@Input() submitButtonDisabled: boolean;

在我的父组件的模板中,我使用插值通过属性绑定来设置它:

<my-child-component
  [submitButtonDisabled]="{{disableSubmitButton()}}">
</my-child-component>

子组件模板读取它的 submitButtonDisabled 属性这样:

<button id="btSubmit" type="submit" (click)="submit()" 
  [disabled]="submitButtonDisabled">Ok</button>

调试我的打字稿代码我看到属性绑定工作正常,但无论disableSubmitButton 返回什么(布尔值),提交按钮都会保持禁用状态。似乎组件在绑定发生之前被渲染。

这有意义吗?我的错在哪里?

参考:Angular 2 - Component Communication

【问题讨论】:

  • 您已经用两个 m 拼写了 submit。看起来您一直在使用它,但只需检查您是否在任何地方都没有不同的拼写
  • 你是对的。我修好了。

标签: angular typescript angular2-components angular2-databinding


【解决方案1】:

如果您将 字符串文字 传递给输入属性,请勿使用方括号:

<my-comp isDisabled="yes"></my-comp>
<my-comp isDisabled="no"></my-comp>

在本例中,输入属性isDisabled 将包含字符串'yes''no'

如果您要传递字符串文字以外的任何内容,则必须使用方括号:

<my-comp [isDisabled]="true"></my-comp>
<my-comp [isDisabled]="false"></my-comp>
<my-comp [isDisabled]="shouldItBeDisabled()"></my-comp>

在该示例中,输入属性isDisabled 将包含布尔值truefalse,或shouldItBeDisabled() 方法返回的值。

注意这些场景中没有一个使用{{ ... }}

在您的情况下,问题可能是您的方法 disableSubmitButton() 没有返回正确的值。 (另外,就像 Ron537 说的,你应该放弃{{ ... }}。)

【讨论】:

  • disableSubmitButton 没问题,但你对花括号是正确的。删除它就足以解决问题。
【解决方案2】:

尝试从绑定中删除双括号。

而不是这个:

[submitButtonDisabled]="{{disableSubmitButton()}}"

使用这个:

[submitButtonDisabled]="disableSubmitButton()"

或者这个:

submitButtonDisabled="{{disableSubmitButton()}}"

【讨论】:

  • 第一个选项有效:[submitButtonDisabled]="disableSubmitButton()"。第二个没用。论文装订让我感到困惑。我需要阅读更多相关信息。
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 2017-04-20
  • 2020-04-05
  • 2017-06-25
  • 2019-06-19
  • 2022-11-23
相关资源
最近更新 更多