在角垫对话框中单击标签上的检查单选按钮

Posted

技术标签:

【中文标题】在角垫对话框中单击标签上的检查单选按钮【英文标题】:Check radiobutton on label click in angular Mat Dialog 【发布时间】:2021-09-16 02:06:02 【问题描述】:

我尝试以角度创建自定义评分栏,它似乎在一个简单的组件中运行良好,但我不得不将它移动到 MatDialog 并且它导致了某些问题。 在初始设置中,我的输入设置为display: none,因为单击标签时可以检查单选按钮。 (同样,在简单组件中效果很好) 在 MatDialog 组件中,我无法再在标签单击时检查它。有什么我错过的吗?是什么导致了问题?

提前感谢您的想法!

我的 app-new-review-modal.html

<mat-dialog-content>
<form [formGroup]="rate">
    <div class="rating" >
      <input type="radio" value="5" name="rateStar" id="star5" formControlName="rateStar">
      <label for="star5"></label>
      <input type="radio" value="4" name="rateStar" id="star4" formControlName="rateStar">
      <label for="star4"></label>
      <input type="radio" value="3" name="rateStar" id="star3" formControlName="rateStar">
      <label for="star3"></label>
      <input type="radio" value="2" name="rateStar" id="star2" formControlName="rateStar">
      <label for="star2"></label>
      <input type="radio" value="1" name="rateStar" id="star1" formControlName="rateStar">
      <label for="star1"></label>
    </div>
  </form>
</mat-dialog-content>

我的控制器:

import FormBuilder, FormGroup, Validators from '@angular/forms';

@Component(
  selector: 'app-new-review-modal',
  templateUrl: './new-review-modal.component.html',
  styleUrls: ['./new-review-modal.component.scss']
)
export class NewReviewModalComponent implements OnInit 
  rate: FormGroup;

  constructor(private fb: FormBuilder) 
    )

  

  ngOnInit(): void 
    this.rate = this.fb.group(
      rateStar: []
    );
  


css(如果需要):

.rating 
  width: 155px;
  display: flex;
  justify-content: space-between;
  font-size: 20px;
  direction: rtl;

  label 
    float: right;
    cursor: pointer;
    color: #676767;

    &:before 
      content: "\2605";
    
  

  input 
    display: none;
  

  input:checked ~ label,
  label:hover ~ label,
  label:hover 
    color: rgb(120, 140, 116);
  


【问题讨论】:

使评分栏的Z-index高于matDialog。 【参考方案1】:

试试这个代码:

import  Component, OnInit  from "@angular/core";
import  FormBuilder, FormGroup, FormControl  from "@angular/forms";

@Component(
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
)
export class AppComponent implements OnInit 
  rate: FormGroup;

  constructor(private fb: FormBuilder) 

  ngOnInit(): void 
    this.rate = this.fb.group(
      rateStar: new FormControl()
    );

    this.setValue("4"); // default value
  

  setValue(rateStar: string): void 
    this.rate.patchValue( rateStar );
  

你可以像这样在 HTML 中获得你的价值 -

<p>
  this.rate.get('rateStar').value
</p>

https://codesandbox.io/s/laughing-heyrovsky-kpj13?from-embed

【讨论】:

以上是关于在角垫对话框中单击标签上的检查单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs:我正在根据状态检查单选按钮,但在选中一个单选按钮时无法单击其他单选按钮

在 Sencha Touch 中处理单选按钮上的事件

在javascript单击处理程序中隐藏和单选按钮和复选框标签

如何保存单选按钮状态?

是否可以在 html 中将单选按钮标签助手值属性设置为“已检查”?

自动单击包含相同文本和标签的页面上的多个按钮