1

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

@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 - 组件通信

4

2 回答 2

5

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

<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()

请注意这些场景中的 NONE 如何使用{{ ... }}.

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

于 2017-01-21T13:24:58.010 回答
1

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

而不是这个:

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

用这个 :

[submitButtonDisabled]="disableSubmitButton()"

或这个 :

submitButtonDisabled="{{disableSubmitButton()}}"
于 2017-01-21T09:41:34.607 回答