角度2 ng - 需要

时间:2016-10-10 10:02:00

标签: angularjs validation angular typescript model-driven

我在角度2中创建了一个模型驱动的表单,只有在取消选中上面的复选框时,才会显示其中一个输入字段。我使用* ngIf执行此操作。 我的问题是,如果取消选中该复选框,我该如何设置所需的输入?在角度1.x中,我可以通过ng-required ="条件"来实现这一点。在视图中。

这是html:

//复选框

<div class="checkbox col-sm-9">
   <label>
     <input type="checkbox"  id="getCompanyAddress" style="cursor: pointer;" [formControl]="form.controls['address']" >Use the company address 
  </label>
</div>

//选项输入:

<div *ngIf="form.value.address == false" class="form-group" [ngClass] = "{'has-error':!form.controls['address'].valid && form.controls['address'].touched}" >
 <label for="add_gestion_adress" class="col-sm-3 control-label">Address
 </label>
  <div class="col-sm-9"><textarea rows="1" id="add_gestion_adress" class="form-control" name="add_gestion_adress" [formControl]="form.controls['address']" ></textarea>
  </div>
</div>

//和型号代码:

   form: FormGroup;
    constructor(fb:FormBuilder){
      this.form = fb.group({
        'name': [null,Validators.compose([Validators.required, Validators.minLength(1)])],
        'type': ["en gros",Validators.compose([Validators.required, Validators.minLength(2)])],
        'person':[null,Validators.compose([Validators.required, Validators.minLength(1)])],
        'address':[false,Validators.compose([Validators.minLength(1)])],
        'locality':[null, Validators.compose([Validators.required])],
        'county':[null,Validators.compose([Validators.required])],
        'country':[null,Validators.compose([Validators.required])]
      })

    }

3 个答案:

答案 0 :(得分:19)

<textarea [required]="your angular expression">

以上版本适用于最新版本的Angular 4

答案 1 :(得分:1)

执行此操作的一种方法是在复选框表单控件中侦听值更改,并相应地在其他控件中添加/删除验证程序。

示例:

this.form.get('checkbox-control').valueChanges.map(
      value => {

          if(value) {
              this.form.get('other-control').setValidators(Validators.required);
          }else {
              this.form.get('other-control').clearValidators();
          }

      }
    );

答案 2 :(得分:0)

FormBuilder接受第二个参数,该参数接受用于跨字段验证的验证器:

this.form = fb.group({
        'name': [null,Validators.compose([Validators.required, Validators.minLength(1)])],
        'type': ["en gros",Validators.compose([Validators.required, Validators.minLength(2)])],
        'person':[null,Validators.compose([Validators.required, Validators.minLength(1)])],
        'address':[false,Validators.compose([Validators.minLength(1)])],
        'locality':[null, Validators.compose([Validators.required])],
        'county':[null,Validators.compose([Validators.required])],
        'country':[null,Validators.compose([Validators.required])]
      }
    , { validator: this.crossFieldValidation });

您可以将其定义为执行任何操作。

crossFieldValidation(ctrl: FormGroup): ValidationErrors|null {
    let isRequired = ctrl.controls.myCheckbox.value === true;
    let hasValue = ctrl.controls.myMaybeRequiredControlXX.value;
    if (isRequired && !hasValue) return {XXrequired: true};
    return null;
}

要检查display / ngClass的错误,请使用form.errors?.XXrequired或您crossFieldValidation()返回的任何键,而不是form.controls.XX.errors?.required