-
Notifications
You must be signed in to change notification settings - Fork 6.8k
form-field: support swapping various child components with ngIf #7737
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Rather than conditional html: <input [placeholder]="myPlaceholder" typescript: myPlaceholder = 'dynamic placeholder' Though I was planning on looking into making form-field pieces more swappable |
@mmalerba while your suggestion will work with a normal string, but I don't see it usable with the current i18n implementation of angular for different languages. 😞 Or am I missing something? (while you are thinking about "form-field pieces that are more swappable" it would be really useful for me that the |
I am having this issue too, but it is with mat-error instead of mat-hint:
|
You can localize a placeholder using:
But not the most DRY approach. According to the documentation: "The placeholder can be specified either via a placeholder attribute on the input or a element in the same form field as the matInput." So a better way of localizing multiple types of placeholders would be:
And that might solve your errors too as you will only have the single input? |
Hitting the same issue with
Tried switching to using
Would definitely love to see "more swappable form-field pieces" 🙏 P.S. thanks to the Angular team for the good work they've done so far ❤️ 👏 Update: was able to workaround by grouping the all form components together into a single conditional render -- basically render the whole
|
Also suffering hard from this issue, requiring me to have a lot of redundant code, as errors and hints cannot be build together dynamically! Any input on this issue from the Angular team? |
I have an open question on stackoverflow where I encountered the same issue. In my case I need to dynamically swap two inputs: one that does and one that does not have have a custom |
It seems to be the same as #16209 |
Try use Unique ID for the hint. A simple hack to make the error go away <mat-hint [id]="field.name">No error</mat-hint> |
I'm also having this issue, except the solution keego posted above didn't work for me. I've tried conditionally rendering a whole new mat-form-field for each input, or just conditionally rendering the inputs inside of it with ng-content/template wrappers - but no matter what I do I keep hitting Here's my code: <ng-container [ngSwitch]="type">
<ng-container *ngSwitchCase="'boolean'">
<mat-form-field>
<mat-label>Value</mat-label>
<mat-hint>{{example}}</mat-hint>
<mat-checkbox [formControl]="formControl.get('__value')"></mat-checkbox>
</mat-form-field>
</ng-container>
<ng-container *ngSwitchDefault>
<mat-form-field>
<mat-label>Value</mat-label>
<mat-hint>{{example}}</mat-hint>
<input matInput [formControl]="formControl.get('__value')">
</mat-form-field>
</ng-container>
</ng-container>
<mat-form-field>
<mat-label>Type</mat-label>
<mat-select
(selectionChange)="setType()"
[formControl]="formControl.get('__type')">
<mat-option *ngFor="let option of this.types"
[value]="option.value">
{{option.label}}
</mat-option>
</mat-select>
</mat-form-field> Any help with this would be greatly appreciated! |
I have the same problem, the placeholder does not update if the control has been changed inside the mat-form-field template. MatFormField requires a call chageDetector after view update. Found two solutions: @ViewChild('formField', { read: MatFormField })
private _formField: MatFormField;
public ngAfterViewChecked(): void {
this._formField?.ngAfterViewInit();
} 2: private _formFieldCdr: ChangeDetectorRef;
@ViewChild('formField', { read: ViewContainerRef })
private _formFieldVcr: ViewContainerRef;
public ngDoCheck(): void {
this._formFieldCdr?.markForCheck();
}
public ngAfterViewInit(): void {
this._formFieldCdr = this._formFieldVcr?.injector.get(ChangeDetectorRef);
} |
Uh oh!
There was an error while loading. Please reload this page.
Bug, feature request, or proposal:
I recently ran into a bug that
mat-hint
threw an error when its correspondingmatInput
is inserted conditionally. E.g. take the following template:Note that the only reason inputs are inserted conditionally here is because the placeholder text is different depending on the condition.
This will throw the following error:
This is not a problem when the input is not inserted conditionally but rather placed in the template right away. I'm not sure if that is by design or not but it caused me some hours of debugging until I realised it was the combination of
mat-hint
inside amat-form-field
whom\smatInput
is rendered using*ngIf
.What is the expected behavior?
I expected this to just work, but again, maybe this is by design but then we should document somewhere that
matInput
s aren't allowed to be inserted using structural directives.What is the current behavior?
Described above.
What are the steps to reproduce?
Here's a plunk that reproduces the error: http://plnkr.co/edit/MrUvFVKIW1BoX9d96eeu?p=preview
Simply check the console.
What is the use-case or motivation for changing an existing behavior?
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
I'm using
@angular/material
version2.0.0-beta.11
but the plunk uses the latest version. Unfortunately I can't tell if this error has been thrown in older versions as well.Is there anything else we should know?
Yeah, you're all doing an amazing job. Thanks for that.
The text was updated successfully, but these errors were encountered: