Angular 2 create dynamic formcontrol that contains formarray












0















I have a reactive input form with a dynamic amount of inputs that I need to add form controls to.



The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



I have created typescript code that will generate the form as I described, however, I haven't been able to set my form to my HTML.



And an example of my generated form:



example



I've tried mapping the form to my html in the following way:



<form [formGroup]="inputForm">
<div *ngFor="let mammal of Mammals; let i = index">
<div *ngFor="let id of mammal.ids; let z = index">
<!-- parent form control -->
<div [formGroupName]="mammals">
<!-- mammals[i].id resolves to 'mammalIdx' -->
<div [formGroupName]="mammals[i].id">
<!-- this should map as the controls Form Array -->
<input [formControlName]="z">
</div>
</div>
</div>
</div>
</form>


But when I try and run this, I get:




Error: Cannot find control with unspecified name attribute




How can I set my html to my form values?



Thank you










share|improve this question



























    0















    I have a reactive input form with a dynamic amount of inputs that I need to add form controls to.



    The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



    I have created typescript code that will generate the form as I described, however, I haven't been able to set my form to my HTML.



    And an example of my generated form:



    example



    I've tried mapping the form to my html in the following way:



    <form [formGroup]="inputForm">
    <div *ngFor="let mammal of Mammals; let i = index">
    <div *ngFor="let id of mammal.ids; let z = index">
    <!-- parent form control -->
    <div [formGroupName]="mammals">
    <!-- mammals[i].id resolves to 'mammalIdx' -->
    <div [formGroupName]="mammals[i].id">
    <!-- this should map as the controls Form Array -->
    <input [formControlName]="z">
    </div>
    </div>
    </div>
    </div>
    </form>


    But when I try and run this, I get:




    Error: Cannot find control with unspecified name attribute




    How can I set my html to my form values?



    Thank you










    share|improve this question

























      0












      0








      0








      I have a reactive input form with a dynamic amount of inputs that I need to add form controls to.



      The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



      I have created typescript code that will generate the form as I described, however, I haven't been able to set my form to my HTML.



      And an example of my generated form:



      example



      I've tried mapping the form to my html in the following way:



      <form [formGroup]="inputForm">
      <div *ngFor="let mammal of Mammals; let i = index">
      <div *ngFor="let id of mammal.ids; let z = index">
      <!-- parent form control -->
      <div [formGroupName]="mammals">
      <!-- mammals[i].id resolves to 'mammalIdx' -->
      <div [formGroupName]="mammals[i].id">
      <!-- this should map as the controls Form Array -->
      <input [formControlName]="z">
      </div>
      </div>
      </div>
      </div>
      </form>


      But when I try and run this, I get:




      Error: Cannot find control with unspecified name attribute




      How can I set my html to my form values?



      Thank you










      share|improve this question














      I have a reactive input form with a dynamic amount of inputs that I need to add form controls to.



      The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



      I have created typescript code that will generate the form as I described, however, I haven't been able to set my form to my HTML.



      And an example of my generated form:



      example



      I've tried mapping the form to my html in the following way:



      <form [formGroup]="inputForm">
      <div *ngFor="let mammal of Mammals; let i = index">
      <div *ngFor="let id of mammal.ids; let z = index">
      <!-- parent form control -->
      <div [formGroupName]="mammals">
      <!-- mammals[i].id resolves to 'mammalIdx' -->
      <div [formGroupName]="mammals[i].id">
      <!-- this should map as the controls Form Array -->
      <input [formControlName]="z">
      </div>
      </div>
      </div>
      </div>
      </form>


      But when I try and run this, I get:




      Error: Cannot find control with unspecified name attribute




      How can I set my html to my form values?



      Thank you







      html angular forms






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 28 '18 at 2:16









      EdonEdon

      419419




      419419
























          1 Answer
          1






          active

          oldest

          votes


















          0














          The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



          As per my understand the arry you expected may be like this



            [  
          {
          "Mammals":[
          {
          "mammalId":[
          {

          }
          ]
          }
          ]
          }
          ]


          for that above array the form will be like this



              this.inputForm = this.fb.group({
          Mammals: this.fb.array([}
          mammalId: this.fb.array([{
          z: ''
          }
          ])}
          ])
          })


          for that above array html should be like this



          HTML



          <form [formGroup]="inputForm">
          <div formArrayName="Mammals">
          <div *ngFor="let mammal of inputForm.get('Mammals'); let i = index" [formGroupName]="i">
          <div formArrayName="mammalId">
          <div *ngFor="let id of mammal.get(mammalId); let z = index" [formGroupName]="z">
          <!-- parent form control -->

          <!-- mammals[i].id resolves to 'mammalIdx' -->

          <!-- this should map as the controls Form Array -->
          <input [formControlName]="z">
          </div>
          </div>
          </div>
          </div>
          </div>
          </div>
          </form>


          It may be helps you






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53511129%2fangular-2-create-dynamic-formcontrol-that-contains-formarray%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



            As per my understand the arry you expected may be like this



              [  
            {
            "Mammals":[
            {
            "mammalId":[
            {

            }
            ]
            }
            ]
            }
            ]


            for that above array the form will be like this



                this.inputForm = this.fb.group({
            Mammals: this.fb.array([}
            mammalId: this.fb.array([{
            z: ''
            }
            ])}
            ])
            })


            for that above array html should be like this



            HTML



            <form [formGroup]="inputForm">
            <div formArrayName="Mammals">
            <div *ngFor="let mammal of inputForm.get('Mammals'); let i = index" [formGroupName]="i">
            <div formArrayName="mammalId">
            <div *ngFor="let id of mammal.get(mammalId); let z = index" [formGroupName]="z">
            <!-- parent form control -->

            <!-- mammals[i].id resolves to 'mammalIdx' -->

            <!-- this should map as the controls Form Array -->
            <input [formControlName]="z">
            </div>
            </div>
            </div>
            </div>
            </div>
            </div>
            </form>


            It may be helps you






            share|improve this answer




























              0














              The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



              As per my understand the arry you expected may be like this



                [  
              {
              "Mammals":[
              {
              "mammalId":[
              {

              }
              ]
              }
              ]
              }
              ]


              for that above array the form will be like this



                  this.inputForm = this.fb.group({
              Mammals: this.fb.array([}
              mammalId: this.fb.array([{
              z: ''
              }
              ])}
              ])
              })


              for that above array html should be like this



              HTML



              <form [formGroup]="inputForm">
              <div formArrayName="Mammals">
              <div *ngFor="let mammal of inputForm.get('Mammals'); let i = index" [formGroupName]="i">
              <div formArrayName="mammalId">
              <div *ngFor="let id of mammal.get(mammalId); let z = index" [formGroupName]="z">
              <!-- parent form control -->

              <!-- mammals[i].id resolves to 'mammalIdx' -->

              <!-- this should map as the controls Form Array -->
              <input [formControlName]="z">
              </div>
              </div>
              </div>
              </div>
              </div>
              </div>
              </form>


              It may be helps you






              share|improve this answer


























                0












                0








                0







                The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



                As per my understand the arry you expected may be like this



                  [  
                {
                "Mammals":[
                {
                "mammalId":[
                {

                }
                ]
                }
                ]
                }
                ]


                for that above array the form will be like this



                    this.inputForm = this.fb.group({
                Mammals: this.fb.array([}
                mammalId: this.fb.array([{
                z: ''
                }
                ])}
                ])
                })


                for that above array html should be like this



                HTML



                <form [formGroup]="inputForm">
                <div formArrayName="Mammals">
                <div *ngFor="let mammal of inputForm.get('Mammals'); let i = index" [formGroupName]="i">
                <div formArrayName="mammalId">
                <div *ngFor="let id of mammal.get(mammalId); let z = index" [formGroupName]="z">
                <!-- parent form control -->

                <!-- mammals[i].id resolves to 'mammalIdx' -->

                <!-- this should map as the controls Form Array -->
                <input [formControlName]="z">
                </div>
                </div>
                </div>
                </div>
                </div>
                </div>
                </form>


                It may be helps you






                share|improve this answer













                The parent control Mammals will contain a variable amount of MammalId's, and each MammalId will contain a FormArray of variable length.



                As per my understand the arry you expected may be like this



                  [  
                {
                "Mammals":[
                {
                "mammalId":[
                {

                }
                ]
                }
                ]
                }
                ]


                for that above array the form will be like this



                    this.inputForm = this.fb.group({
                Mammals: this.fb.array([}
                mammalId: this.fb.array([{
                z: ''
                }
                ])}
                ])
                })


                for that above array html should be like this



                HTML



                <form [formGroup]="inputForm">
                <div formArrayName="Mammals">
                <div *ngFor="let mammal of inputForm.get('Mammals'); let i = index" [formGroupName]="i">
                <div formArrayName="mammalId">
                <div *ngFor="let id of mammal.get(mammalId); let z = index" [formGroupName]="z">
                <!-- parent form control -->

                <!-- mammals[i].id resolves to 'mammalIdx' -->

                <!-- this should map as the controls Form Array -->
                <input [formControlName]="z">
                </div>
                </div>
                </div>
                </div>
                </div>
                </div>
                </form>


                It may be helps you







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 28 '18 at 6:04









                Soumya GangamwarSoumya Gangamwar

                394320




                394320
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53511129%2fangular-2-create-dynamic-formcontrol-that-contains-formarray%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

                    Calculate evaluation metrics using cross_val_predict sklearn

                    Insert data from modal to MySQL (multiple modal on website)