Как динамически связывать объекты Array формы - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть 2 массива,

AccountArray = [{'accountName': 1}, {'accountName': 2}, {'accountName': 3}];
    optionArray = [{'optNumber': 1,'optDesc': 'Appi'}, {'optNumber': 2,'optDesc': 'Appimon'}, {'optNumber': 3,'optDesc': 'Appimol'}, {'optNumber': 4,'optDesc': 'Appivali'}];

И у меня есть форма, как показано ниже:

initForm() {
        this.optionForm = this._fb.group({
            'options': this._fb.array([]),
        });
        this.createOptionArray();
    }

createOptionArray() {
        let optionArray: Array<any> = [];
        const optionsControl = <FormArray>this.optionForm.controls['options'];

        console.log(this.selectedEvntAccList, 'test');


        this.selectedEvntAccList.map((account, index)=> {
            account.options.map((option, optInd)=> {
                // return {'accountNumber': account.accountNumber, 'optionNumber': option.optNumber};
                optionArray[optInd] =  {'accountNumber': account.accountNumber, 
                                        'optNumber': option.optNumber, 
                                        'optDesc': option.optDesc,
                                        'shareVal': '',
                                        'refVal': ''};
            });
        });


        console.log(optionArray, 'option Array');
        optionArray.map(obj => {
            optionsControl.push(new FormControl(obj));
        });

        console.log(this.optionForm.controls['options'], 'optionsControl');

    }

Шаблон:

<div class="row" *ngIf="optionForm" [formGroup]="optionForm">
        <!-- <div class="row u-nomargin" *ngFor="let option of optionForm.controls['options']?.value; let i = index"> -->
        <div class="row u-nomargin" *ngFor="let option of optionForm.controls['options']?.controls; let i = index">
          <div class="row bottom-small">
            <div class="col-4 u-border-right-dotted option-height">
              <h3>{{'corporate_action.view.eventOptions.seqHeader1' | translate}} {{option?.value?.optNumber}} -
                {{option?.value?.optDesc}}</h3>
              <div class="row action-view-options">
                <label class="btn btn-dbs-link accordian u-margin-top-16 u-nopadding" (click)="hideShowDetails(option)">
                  <span *ngIf="option.__hide__">{{'respondcae.form.show_option' | translate}}</span>
                  <span *ngIf="!option.__hide__">{{'respondcae.form.hide_option' | translate}}</span>
                  <label class="icon icon-expand" [ngClass]="{'collapse': !option.__hide__}"></label>
                </label>
              </div>
            </div>
            <div class="col-8">
              <div class="row">
                <div class="col-5 display-value">
                  {{'respondcae.form.noOfShares' | translate}}
                  <br>
                  <my-input [type]="'tel'" [formControl]="ShareValue">
                  </my-input>
                </div>
                <div class="col-7 display-value">
                    {{'respondcae.form.your_reference' | translate}}
                    <br>
                    <my-input [type]="'text'" [formControl]="ShareValue"
                  [maxlength] = '15'></my-input>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

Я хочу достичь этоМне нужно создать наборы пар аккаунт-опция.Одна учетная запись может иметь максимум 4 варианта.Если есть другая учетная запись, то эта учетная запись будет иметь свои собственные наборы параметров.

Поэтому структура данных должна выглядеть примерно так:

{'accountNumber': uniqueAccountNumber, 'optNumber':optionNumber, 'optDesc': option.optDesc, 'shareVal': 'some share val', 'refVal': 'some ref val'}

Как динамически заполнить этот массив уникальными объектами на основе номера счетаа динамически связывать shareval и refVal?Есть идеи, ребята?Я полностью потерян.Заранее спасибо

1 Ответ

0 голосов
/ 02 декабря 2018

Одна учетная запись может иметь максимум 4 варианта.Если есть другая учетная запись, то эта учетная запись будет иметь свои собственные наборы параметров

, чтобы достичь этого, я думаю, что вам, возможно, придется изменить второй массив объектов

 optionArray2 = [
{'accountName':1,'optNumber': 1, 'optDesc': 'Appi' },
{'accountName':1,'optNumber': 2, 'optDesc': 'Appimon' },
{'accountName':1,'optNumber': 3, 'optDesc': 'Appimol' },
{'accountName':1,'optNumber': 4, 'optDesc': 'Appivali' },
{'accountName':2,'optNumber': 5, 'optDesc': 'Tesla' },
{'accountName':2,'optNumber': 6, 'optDesc': 'Demon' },
{'accountName':2,'optNumber': 7, 'optDesc': 'Alpha' },
{'accountName':2,'optNumber': 8, 'optDesc': 'Charly' }

];

, затемВы можете перебрать эти два массива и создать новый массив на основе «accountName».я думаю, что проблема здесь в том, что у вас нет связи между этими двумя массивами для объединения.

...