Как скрыть ввод материала

Обычно, если я хочу, чтобы поле формы было включено в отправку, но не было видно, я делаю <input type = "hidden" />

Однако matInput не допускает тип hidden. Я мог бы использовать display: none;, но это обычно исключает ценность из представления.

Есть ли способ скрыть ввод в материальной динамической форме, которая также включает значение в представлении?

Вы хотите, чтобы вас скрыли или чтобы на вас не нажимали?

Abedin.Zhuniqi 28.02.2019 00:31
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
10
1
29 279
8

Ответы 8

Здесь я добавил код для matInput, вы можете видеть, что сначала mat-form-field это input hidden и работает. Если вы хотите показать, что на него нельзя нажимать, просто добавьте disabled в конце input, и это сработает.

HTML

<form class = "example-form">
  <mat-form-field class = "example-full-width">
    <input matInput placeholder = "Favorite food" value = "Sushi" type = "hidden">
  </mat-form-field>

  <mat-form-field class = "example-full-width">
    <textarea matInput placeholder = "Leave a comment"></textarea>
  </mat-form-field>
</form>

https://stackblitz.com/edit/angular-g9jxjd-huz6me?file=app/input-overview-example.html

Как уже упоминалось, type="hidden" не работает с matInput. Если вы откроете консоль браузера, вы увидите сообщение «ОШИБКА: тип ввода «скрытый» не поддерживается matInput». и если вы попытаетесь отправить форму с типом = "скрытый", то форма будет повреждена, отображая только часть значений формы. Простой способ обойти эту проблему — использовать класс CSS для тега mat-form-field:

<mat-form-field class = "invisible example-full-width">
   <input matInput placeholder = "Favorite food" value = "Sushi" ngModel name = "fish">
</mat-form-field>

Фрагмент CSS:

.invisible{
    display: block;
    visibility: hidden;
    height: 0;
    width: 0;
}

Вы можете просто использовать директиву скрытый.

<mat-form-field [hidden] = "!(formX.value.otherControl == '1')">
    <input matInput type = "number" placeholder = "An Input" formControlName = "aControl">
</mat-form-field>

Я использовал значение в моей форме с именем formX (formX.value.otherControl) в моем примере, но вы можете использовать истинный в своем случае.

<mat-form-field [hidden] = "true">
    <input matInput type = "number" placeholder = "An Input" formControlName = "aControl">
</mat-form-field>

Не работает для ng10. Кто-нибудь знает другой подход, кроме использования .css?

sarora 01.09.2020 22:57

У меня это тоже не работает в Angular 10. Это работает class = "cdk-visually-hidden".

EdWood 13.11.2020 23:04

поскольку скрытые поля не видны, они не материальны, в качестве альтернативы вы можете определить элемент управления в форме в компоненте следующим образом.

this.yourForm = this.formBuilder.group({
        
        hidden_fld:["your_value",Validators.nullValidator],
        other_field: ['', Validators.required],
      
        });

поэтому вы устанавливаете значение по умолчанию hidden_fld, и при отправке это значение также будет отправлено вместе с другими переменными формы.

В angular 10 вы можете использовать *ngIf с <mat-form-field>

Используйте скрытый = "истина" для решения этой проблемы

<input  hidden = "true"  matInput class = "form-control" formControlName = "yourfieldname">

если вы не нашли ответ. Вот как я добился успеха, учитывая именно то, что вы хотели сделать. Поскольку я хотел скрыть определенные входные данные, я просто не включил их в a, и форма была успешно отправлена ​​​​с помощью кнопки action = '' post = '' и type = 'submit'. Пример:

<form action='/path' method='post'>
     <mat-form-field class = "form-element">
        <label for = "item">
          <input matInput placeholder = "My Item"
                 [value] = "paymentDetail._amount" name = "item" id = "item">
        </label>
      </mat-form-field>
     <input name = "anotherItem" id = "anotherItem" type = "hidden"
             [value] = "model._itemDescription" >
</form>

Я протестировал его для Angular v11, где hidden все еще не поддерживается для mat-form-field, поэтому вместо создания класса css или использования type=hidden или если директива *ngIf невозможна, если вы не хотите обновлять жизненный цикл компонента.

Я только что изменил [hidden] = "variable" -> [class.cdk-visually-hidden] = "variable".

Кредит принадлежит @EdWood

Это сработало для меня на Angular 12

Kit Peters 23.11.2021 21:05

Другие вопросы по теме