2017-07-06 2 views
0
targetList: any = []; 
public datavalue = [ 
    { 
    value: "" 
    } 
] 

this.httpService.service("Fields").subscribe(
    (
    targetList => { 
     this.targetList = targetList; 
     console.log(this.targetList); 
     for (var i = 0; i < this.targetList.length; i++) { 
     if (this.targetList[i].results.multiple == true) { 
     this.targetList[i].results.data = this.datavalue; 
     } 
     } 
    } 
), 
    error => { alert(`Can't get Fields.`); } 
); 

addvalue(i): void { 
    var dataObj = { 
    value: "" 
    }; 
    this.targetList[i].results.data.push(dataObj); 
} 

removevalue(i, index) { 
    this.targetList[i].results.data.splice(index, 1); 
    } 

Die Daten, die ich in meinem Dienst ist wieDaten zu einem Objekt hinzufügen

[ 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":true 
    } 
    }, 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":true 
    } 
    }, 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":false 
    } 
    } 
] 

In diesem Ergebnis folgt, wenn mehrere = true dann, wie diese Daten hinzuzufügen.

[ 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":true, 
     "data" :[ 
        { 
        value : "" 
        } 
       ] 
    } 
    }, 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":true 
     "data" :[ 
        { 
        value : "" 
        } 
       ] 
    } 
    }, 
    { 
    "results":{ 
     "field1":false, 
     "field2":0, 
     "multiple":false 
    } 
    } 
] 

Hilfe in das Hinzufügen dieses Formats, da die Felder dynamisch sind. Ich rende das in die HTML-Seite.

   <div *ngIf="targetList.length>0"> 
       <!-- Index i for List of Elements--> 
       <div *ngFor="let target of targetList; let i = index"> 
        <fieldset> 
        <section> 
         <label class="label">{{target.results.field1}}</label> 
         <div *ngIf="target.results.multiple else singletext" class="table-responsive"> 
         <table class="table table-bordered"> 
          <tbody> 
          <!-- Index j for Multiple Data within an Element--> 
          <tr *ngFor="let data of target.results.data; let j = index"> 
           <td> 
           <label class="input"> 
            <input type="text" name={{target.results.field1+i+j}} ngModel class="input-sm"> 
           </label> 
           </td> 
           <td> 
           <label class="input"> 
            <a class="btn btn-danger btn-sm" (click)="removevalue(i,j)"><i class=" fa fa-remove"></i></a></label> 
           </td> 
          </tr> 
          <tr> 
           <td colspan="2"><a class="btn btn-success btn-sm" (click)="addvalue(i)">Add Value</a></td> 
          </tr> 
          </tbody> 
         </table> 
         </div> 
         <ng-template #singletext> 
         <label class="input"> 
          <input type="text" name={{target.results.feild1+i}} ngModel class="input-sm"> 
         </label> 
         </ng-template> 
         <label class="label">{{ target.results.desc }}</label> 
        </section> 
        </fieldset> 
       </div> 
       </div> 

In diesem, wenn ich den obigen Code verwenden, ist es auch Datenliste zum zweiten Objekt ist das Hinzufügen, während ich es nur für das erste Objekt hinzufügen müssen.

+1

Können Sie den Servicecode anzeigen? Verwenden Sie den Observable-Operator ".map"? – DeborahK

Antwort

0

Schleife durch die Ihre gesamte json Objekt und sucht das 'multiple' Attribut in jedem der Objekte innerhalb eines Arrays enthalten

targetList: any = []; 

    this.httpService.service("Fields").subscribe(
     (
     targetList => { 
      this.targetList = targetList.json(); 
      console.log(this.targetList); 

      for(let i=0 ; i<this.targetList.length ; i++){ 
       if(this.targetList[i].results.multiple){ 
       // assuming you have data ready in 'dataValue' object 
       this.targetList[i].results['data'] = Object.assign({}, dataValue); // clone the object before setting it 
       } 
      } 
     } 
    ), 
     error => { alert(`Can't get Fields.`); } 
    ); 
+0

Dies wird es hinzugefügt, aber ich werde nicht in der Lage sein, es wieder wie folgt hinzuzufügen, für das Hinzufügen wieder einen Wert zu den vorhandenen Daten –

+0

Was meinst du mit fügen Sie es erneut? Wenn Sie das hinzufügen möchten? Das kannst du sicherlich tun. –

+0

Ich denke, Referenz für das Datenobjekt sind die gleichen. Klonen Sie es, bevor Sie zuweisen. Mein Code wurde aktualisiert. –

0

Versuchen Sie, wie dieses

json ist die Antwort

var json = '[ { "results":{ "field1":false, "field2":0, "multiple":true } }, { "results":{ "field1":false, "field2":0, "multiple":true } }, { "results":{ "field1":false, "field2":0, "multiple":false } } ]'; 
json = JSON.parse(json); 
for(var i = 0; i < json.length; i++) { 
    var obj = json[i]; 
    if(obj.results.multiple){ 
    json[i].results['data'] = []; 
    } 
} 
Verwandte Themen