【问题标题】:How to loop object inside an object using For loop如何使用 For 循环在对象内循环对象
【发布时间】:2018-01-15 01:10:34
【问题描述】:

我目前正在开发一个 Angular 5 应用程序并坚持进行验证。我有一个包含姓名、电子邮件、性别和地址的表格。我使用FormGroupname 将城市、州、国家/地区分组到地址中。我在组件中编写了一个for 循环来循环表单中的valueChanges,并使用Validators 抛出错误。以下是我的代码:

export class RegistrationComponent implements OnInit {
  registerForm: FormGroup;
  constructor(private fb: FormBuilder) { }
  ngOnInit() {
    this.createLoginForm();
  }

   validationMessages = {
    name: {
        required: 'Name is required.',
    },
    email: {
        required: 'Email is required.',
    },
    gender: {
        required:'Gender is required.'
    },
    city: {
        required: 'City is required.',
    },
    state: {
        required: 'State is required.',
    },
    country: {
        required: 'Country is required.',
    },
  registerFormErrors = {
     name: '',
     email: '',
     gender: '',
     address:{
         city:'',
         state:'',
         country:'',
     }
}

createLoginForm(): void {
this.registerForm = this.fb.group({
name: ['', [Validators.required]],
email: ['', [Validators.required]],
gender: ['',[Validators.required]],
sur_name: ['', [Validators.required]],
address: this.fb.group({
  city: ['',[Validators.required]],
  state: [''],
  country: ['',[Validators.required]],
})      

this.registerForm.valueChanges.subscribe(data => 
                        this.validateRegisterForm(data));

  validateRegisterForm(data: any): void {
     if (!this.registerForm) return;
       for (let field in this.registerFormErrors) {
         this.registerFormErrors[field] = '';
         let input = this.registerForm.get(field);
            if (input.invalid && input.dirty || input.invalid) {
              for (let errors in input.errors) {
                 this.registerFormErrors[field] = this.validationMessages[field][errors];
        }
      }
    }
  }

在上面的代码中,我可以遍历registerFormErrors,但问题在于地址。由于地址是一个对象,我无法循环地址组字段。如何修改我的 for 循环,以便我可以遍历所有值以及地址对象。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: javascript angular loops typescript


    【解决方案1】:

    你可以做一个循环来检查这个值是否是一个对象。如果它是一个对象,你必须遍历键。

    let example = {
         name: 'Foo',
         email: 'Bar',
         gender: 'Male',
         address:{
             city:'A',
             state:'B',
             country:'C',
         }
    }
    
    Object.keys(example).forEach(key => {
        if (typeof example[key] === "object") {
            Object.keys(example[key]).forEach(subkey => {
                doValidation(example[key][subkey])
            })
        } else {
            doValidation(example[key]);
        }
    })
    
    function doValidation(key) {
        console.log(key);
    }

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多