I have this property in a child component:
@Input() submitButtonDisabled: boolean;
In the template of my parent component I set it via property binding using interpolation:
<my-child-component
[submitButtonDisabled]="{{disableSubmitButton()}}">
</my-child-component>
The child component template reads its
submitButtonDisabled
property this way:
<button id="btSubmit" type="submit" (click)="submit()"
[disabled]="submitButtonDisabled">Ok</button>
Debugging my typescript code I see property binding working fine, but the submit button keeps disabled no matter what disableSubmitButton
returns (a boolean value). It seems the component is being rendered before the binding to take place.
Does this make any sense? Where is my mistake?
Reference: Angular 2 - Component Communication
If you're passing a string literal to your input property, DO NOT USE the square brackets:
In this example, the input property
isDisabled
will contain the string'yes'
or'no'
.If you're passing anything other than a string literal, then you MUST use the square brackets:
In that example, the input property
isDisabled
will contain the booleantrue
orfalse
, or the value returned by theshouldItBeDisabled()
method.Notice how NONE of these scenarios uses
{{ ... }}
.In your case, the problem might be that your method
disableSubmitButton()
doesn't return the correct value. (Also, like Ron537 said, you should drop the{{ ... }}
.)