【问题标题】:Dynamically disable a dropdown of reactive form动态禁用反应形式的下拉菜单
【发布时间】:2020-09-27 03:40:05
【问题描述】:

我正在尝试禁用使用 ul 和 li 构建的下拉菜单,我必须使用 ui 和 li 而不是在响应式表单中选择需求。

HTML

<ul data-dropdown data-value class="bx--dropdown" tabindex="0">
     <li class="bx--dropdown-text">Validation type</li>
     <li>
       <ul class="bx--dropdown-list">
        <li data-option [attr.data-value]="input" class="bx--dropdown-item"   *ngFor="let input of validationTypes;">
         <a class="bx--dropdown-link" href="javascript:void(0)" tabindex="-1">{{input}}</a>
        </li>
      </ul>
   </li>
</ul>

ts

let fieldSetGroup = <FormArray>this.createTemplateForm.get("fieldSets");
        fieldSetGroup.push(this.fb.group({
            key: ["", Validators.required],
            "type": ["", Validators.required],
            mandatory : ["", Validators.required],
            validationType: [""]
}));
let fg  = <FormGroup> fieldSetGroup.controls[id];
if (fg.controls["key"] === "Apple") {
  fg.controls["validationType"].disable();
}

尝试在 ul 和 li 上添加 formControlName...没有工作...如何处理这种情况?

【问题讨论】:

  • @Edison Disable of
      /complete 下拉列表和禁用条件是如果反应形式的字段之一不为空并且具有某些值。
  • 标签: javascript html angular angular-reactive-forms


    【解决方案1】:

    你有两个选择,要么使用响应式形式,要么使用 css 类

    为了使用响应式表单,请将formControlname 添加到您的组件中

    <ul data-dropdown data-value class="bx--dropdown" tabindex="0" formControlName="validationType">
         <li class="bx--dropdown-text">Validation type</li>
         <li>
           <ul class="bx--dropdown-list">
            <li data-option [attr.data-value]="input" class="bx--dropdown-item"   *ngFor="let input of validationTypes;">
             <a class="bx--dropdown-link" href="javascript:void(0)" tabindex="-1">{{input}}</a>
            </li>
          </ul>
       </li>
    </ul>
    

    并在您的方法中添加以下代码(您想禁用它)

    const ctrl = this.fg.get('validationType');
      ctrl.disable();
    

    使用 css 实现这一点
    将此添加到您的组件 css 中

    .disabled{
        pointer-events:none;
        opacity:0.4;
      }
    

    并在你的 html 中将此 cals 添加到你的元素中

     <ul data-dropdown data-value class="bx--dropdown" tabindex="0" [class.disabled]="fg.invalid">
         <li class="bx--dropdown-text">Validation type</li>
         <li>
           <ul class="bx--dropdown-list">
            <li data-option [attr.data-value]="input" class="bx--dropdown-item"   *ngFor="let input of validationTypes;">
             <a class="bx--dropdown-link" href="javascript:void(0)" tabindex="-1">{{input}}</a>
            </li>
          </ul>
       </li>
    </ul>
    

    请将fg.invalid替换为您的验证条件

    【讨论】:

    • 谢谢,但是这两种方法对我都不起作用,错误错误:第一种方法的路径:'fieldSets -> 0 -> validationType' 的表单控件没有值访问器。
    • 请在[class.disabled]="fg.invalid" 中用"fg.invalid 替换您的验证条件
    • 里面我的验证条件是什么? if (mycondition) { fg.invalid}?
    • 在一个问题中修改
    • [class.disabled]="fg.invalid"更改为[class.disabled]=fieldSetGroup.values.key =='apple'
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签