当前位置: 首页 > 知识库问答 >
问题:

Angular mat选择“不可见”,直到单击它,如何设置默认值

周飞语
2023-03-14

我遇到了与使选定的mat工作相关的树问题(请不要让我问3个问题,因为它们都是相关的)

  1. 在单击空白区域之前,控件不可见

忽略按钮下方的红色消息只是一个提醒

单击空白区域时,将显示选择选项。

选择后,控件处于无效模式

没有任何控制台/角度误差

这里是组件

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-game-round',
  templateUrl: './game-round.component.html',
  styleUrls: ['./game-round.component.css']
})
export class GameRoundComponent implements OnInit {
  moves : string[] = [];
  selectedMove: string = 'Rock';

  currentRoundInfo = new FormGroup({
    moves: new FormControl('', [Validators.required]),
  });
  constructor(
    private router:Router) { }

  ngOnInit(): void {
    this.backService.getGameMoves()
      .subscribe((data: string[]) => {
        this.moves = data;
        //this.currentRoundInfo.setValue({moves : data}) ;
        console.log(`getGameMoves:${this.moves}`);
      });
      
    //trying to set a defult value
      this.currentRoundInfo.setValue({
        moves: 'Paper'
      });

  }

  moveSelected(move: string) {
    console.log("moveSelected:" + move) ;
    this.selectedMove = move ;
  }

  onSubmit() {
    console.log("next") ;
    
  }
}

这是HTML

<div class="full-width-centered">
  <form [formGroup]="currentRoundInfo" (ngSubmit)="onSubmit()">
    <div class="full-width" >
      <mat-form-field floatLabel="never" appearance="outline">
        <mat-label>Select your move:</mat-label>
        <mat-select [(value)]="selectedMove" formControlName="moves" placeholder="test placeholder" (selectionChange)="moveSelected($event.value)">
          <mat-option  *ngFor="let m of moves" [value]="m">
            {{m}}
          </mat-option>
        </mat-select>
      </mat-form-field>
    </div>
    <br>
    <div>
      <button type="submit">NEXT</button>
    </div>
  </form>
</div>

我在第一期中发现了另一个问题,但没有给出答案。

Matt-Select直到我点击它才显示

我还尝试了许多其他类似的答案,但没有成功(将floatlabel更改为always并设置占位符值)

共有2个答案

江宏伟
2023-03-14

似乎“选择”的角度材质默认样式不起作用,所以我决定覆盖它。

.mat-select {
    border: 1px solid lightseagreen !important ;
    background: lightseagreen;
    height: 30px !important;
}

设置默认值是可行的,但由于select不可见,我看不到

//Set de default value
this.currentRoundInfo.setValue({
    movesControl: 'rock' 
});

要保持选定的值,只需存储在组件属性中,并将其绑定到选择:

<mat-select [(value)]="selectedMove"

更新:重新安装角度/材料并重新启动ng serve也有帮助

因此,在进行更多造型之后,这就是它的外观:

樊琦
2023-03-14

您需要添加一个区域。区域提供跨异步任务持久化的执行上下文。

import {Component, OnInit, NgZone} from '@angular/core';

 

constructor(
    private router: Router,
    private zone: NgZone
) { }

 

this.backService.getGameMoves()
  .subscribe((data: string[]) => {
    this.zone.run(() => {
        this.moves = data;
    });
    //this.currentRoundInfo.setValue({moves : data}) ;
    console.log(`getGameMoves:${this.moves}`);
  });

这应该可以解决您的问题。我无法通过测试来验证,因为我无法访问您的服务或代码链接进行测试,但我已经在自己的类似场景中进行了测试。

 类似资料:
  • 我有一个Java应用程序,我使用了Hibernate、Primefaces、JSF、Jquery、Twitterbootstrap和Spring。 我的应用程序中有许多数据表。 我希望DataTable有一个默认的选定项。 primefaces提供了什么方法吗?以下是它现在的样子: 以下是DataTable:

  • 我在谷歌上搜索了一下,没有找到任何关于这个的信息。 我有这个密码。 有这样的数据 输出是这样的。 如何将数据中的第一个选项设置为默认值,以便得到如下结果。

  • 问题内容: 我有一个用于编辑对象的表单,但无法在选择框中选择一个值。 我有一个代表要编辑的json数组,看起来像这样: 现在我同时从另一个如下所示的json数组中填充选择框: 在我的网页内,我正在创建选择框,如下所示: 选择框正在为我填充,但应该选择与中的版本匹配的值。我已经尝试了和,甚至尝试了设置,甚至都行不通。 我已经在Angularjs网站和google上进行了搜索,并浏览了无数教程,但是仍

  • 我有一个用Node.js、express和Mongoose构建的CRUD应用程序。在这个应用程序我有一个表单,和1的输入是一个文件输入上传一个图像。我使用cloudinary、cloudinary storage和multer来处理这些图像。如果用户上传了图像,我可以成功地将其添加到我的数据库中,然后在以后呈现它。我还没弄明白的是,如果在文件输入中没有选择,如何设置默认图像。这是我提交的表格: 下

  • 问题内容: 我有一些单选按钮,我希望其中的一个按钮在页面加载时默认设置为选中状态。我怎样才能做到这一点? 问题答案: XHTML解决方案: 请注意,属性的实际值并不重要。这只是分配的约定。最重要的是,字符串喜欢或没有任何特殊含义。 如果您不希望符合XHTML,则可以将代码简化为:

  • 问题内容: 我在这里看到了Angular select指令的文档:http : //docs.angularjs.org/api/ng.directive :select 。我不知道如何设置默认值。这令人困惑: 选择作为数组中值的标签 这是对象: HTML(工作): 然后我尝试在select元素内添加ng-option属性以设置为默认选项(不起作用)。 我究竟做错了什么? 问题答案: 因此,假设该