【问题标题】:how to build JSON data using ngModel in form and table with ngFor in Angular?如何在 Angular 中使用 ngModel 和表格中的 ngFor 构建 JSON 数据?
【发布时间】:2017-10-08 13:59:21
【问题描述】:

如何使用 ngModel 构建 JSON 数据,它是组件在表单内,表在表单外,我让 ngModel 在表中使用 ngFor 重复。这是我的 html 的样子:

app.component.html:

<div>
    <form>
        <div class="form-group row">
            Nama Role : <input type="text" [(ngModel)]="nama_role" [ngModelOptions]="{standalone: true}" class="form-control" placeholder="Nama Role" pattern="[a-zA-Z-0-9. ]+">
        </div>
    </form>

    <div>
        Pilih Hak :
        <table class="mytable">
            <tr>
                <th>No</th>
                <th>Kode Aplikasi</th>
                <th>Nama Aplikasi</th>
                <th>View?</th>
                <th>Insert?</th>
                <th>Edit?</th>
                <th>Delete?</th>
            </tr>
            <tr *ngFor="let sources of source; let a=index">
                <td>{{a + 1}}</td>
                <td>{{sources.KODE_APPLICATION}}</td>
                <td>{{sources.NAMA_APPLICATION}}</td>
                <td><input type="checkbox" [(ngModel)]="sources.hak_akses" (change)="toggle($event)" /> {{sources.HAK_AKSES}}</td>
                <td><input type="checkbox" [(ngModel)]="sources.hak_insert" (change)="toggle($event)" />{{sources.HAK_INSERT}}</td>
                <td><input type="checkbox" [(ngModel)]="sources.hak_edit" (change)="toggle($event)" />{{sources.HAK_EDIT}}</td>
                <td><input type="checkbox" [(ngModel)]="sources.hak_delete" (change)="toggle($event)" />{{sources.HAK_DELETE}}</td>
            </tr>
        </table>
    </div>

    <div class="row show-grid">
        <button class="btn btn-primary" (click)="save()">Save</button>
    </div>

</div>

这是我的 app.component.ts

export class frmInputMasterRole {

  public sKodeRole: any;
  sStorage:any;
  hak_akses:any;
  hak_insert:any;
  hak_edit:any;
  hak_delete:any;
  private busyloadevent: IBusyConfig = Object.assign({}, BUSY_CONFIG_DEFAULTS);
  marked = false;

  constructor(private frmInputMasterRoleService: FrmInputMasterRoleService, protected router: Router) {
    this.sKodeRole = 'Auto Generated';
    this.sStorage = sessionStorage.getItem('mAuth');
    this.sStorage = JSON.parse(this.sStorage);

    this.busyloadevent.busy = this.frmInputMasterRoleService.getListRoleDetail().then(
      data => {
        this.source = data;
        console.log(data);
        for (var i of this.source) {
          this.hak_akses = i.HAK_AKSES;
        }
      },
      err => {
           console.log(err);
          }
      }
    );

  }

  save(){
    console.log(this.hak_akses);
  }

  toggle(e){
    console.log(e.target.checked)
  }

  cancel(){
    this.router.navigate(['/pages/master/rolelist']);
  }

}

这是使用我的 REST API 时的 JSON 数据,它在源类型中使用 ngFor 循环:

[
   {
      "No":"1",
      "KODE_APPLICATION":"APPL00001",
      "NAMA_APPLICATION":"Master Bass",
      "HAK_AKSES":0,
      "HAK_INSERT":0,
      "HAK_EDIT":0,
      "HAK_DELETE":0
   },
   {
      "No":"2",
      "KODE_APPLICATION":"APPL00002",
      "NAMA_APPLICATION":"Master Customer",
      "HAK_AKSES":0,
      "HAK_INSERT":0,
      "HAK_EDIT":0,
      "HAK_DELETE":0
   },
   {
      "No":"3",
      "KODE_APPLICATION":"APPL00003",
      "NAMA_APPLICATION":"Master Teknisi",
      "HAK_AKSES":0,
      "HAK_INSERT":0,
      "HAK_EDIT":0,
      "HAK_DELETE":0
   }
]

我想要的是在检查最后一行时构建看起来像这样的 JSON 数据:

{
  "nama_role":test, 
  "details": [{
  "KODE_APPLICATION":"APPL00003",
  "NAMA_APPLICATION":"Master Teknisi",
  "HAK_AKSES":1,
  "HAK_INSERT":0,
  "HAK_EDIT":0,
  "HAK_DELETE":0
   }]
}

我该怎么做?我不知道从哪里开始,因为有一个带有 ngModel 的表与 ngFor 循环

【问题讨论】:

    标签: json angular angular2-forms ngfor


    【解决方案1】:

    代码附在下面:

        @Component({
        selector: 'my-app',
        template: `<form>
                        <div class="form-group row">
                            Nama Role : <input type="text" [(ngModel)]="nama_role" [ngModelOptions]="{standalone: true}" class="form-control" placeholder="Nama Role" pattern="[a-zA-Z-0-9. ]+">
                        </div>
                   </form>
    
                   <table>
                        <tr>
                            <th>No</th>
                            <th>Kode Aplikasi</th>
                            <th>Nama Aplikasi</th>
                            <th>View?</th>
                            <th>Insert?</th>
                            <th>Edit?</th>
                            <th>Delete?</th>
                        </tr>
                        <tr *ngFor="let sources of source; let a=index">
                            <td>{{sources.KODE_APPLICATION}}</td>
                            <td>{{sources.NAMA_APPLICATION}}</td>
                            <td><input type="checkbox"  [checked]="sources.HAK_AKSES" [(ngModel)]="sources.HAK_AKSES" (change)="toggle(a, sources.HAK_AKSES, \'HAK_AKSES\')"/> {{sources.HAK_AKSES}}</td>
                            <td><input type="checkbox" [checked]="sources.HAK_INSERT" [(ngModel)]="sources.HAK_INSERT"  (change)="toggle(a, sources.HAK_INSERT, \'HAK_INSERT\')" />{{sources.HAK_INSERT}}</td>
                            <td><input type="checkbox" [checked]="sources.HAK_EDIT"  [(ngModel)]="sources.HAK_EDIT" (change)="toggle(a, sources.HAK_EDIT, \'HAK_EDIT\')" />{{sources.HAK_EDIT}}</td>
                            <td><input type="checkbox" [checked]="sources.HAK_DELETE" [(ngModel)]="sources.HAK_DELETE" (change)="toggle(a, sources.HAK_DELETE, \'HAK_DELETE\')" />{{sources.HAK_DELETE}}</td>
                        </tr>
                    </table>
    
                    <div class="row show-grid">
                        <button class="btn btn-primary" (click)="save()">Save</button>
                    </div> 
                    <custom-comp [myFunc]="handleClick()"></custom-comp>
                  `
    })
    
    export class MainComponent {
    
        source = [];
    
        ngOnInit() {
    
            this.source = [{
              "No":"1",
              "KODE_APPLICATION":"APPL00001",
              "NAMA_APPLICATION":"Master Bass",
              "HAK_AKSES":1,
              "HAK_INSERT":1,
              "HAK_EDIT":1,
              "HAK_DELETE":0
           },
           {
              "No":"2",
              "KODE_APPLICATION":"APPL00002",
              "NAMA_APPLICATION":"Master Customer",
              "HAK_AKSES":0,
              "HAK_INSERT":0,
              "HAK_EDIT":0,
              "HAK_DELETE":0
           },
           {
              "No":"3",
              "KODE_APPLICATION":"APPL00003",
              "NAMA_APPLICATION":"Master Teknisi",
              "HAK_AKSES":1,
              "HAK_INSERT":0,
              "HAK_EDIT":0,
              "HAK_DELETE":0
           }
        ];
        }
    
        save() {
            let payload = {
                "nama_role": this.nama_role,
                "details": this.source
            };
    
            console.log(payload);
        }
    
        toggle(index, val, key) {
            this.source[index][key] = val ? 1 : 0;
        }
    }
    

    干杯!

    【讨论】:

    • 你能帮我多一点吗?在您的代码中有这一行 我不想要这个动作,必须提交所有行保存时,我如何获得全部?保存时必须存在更改与否
    • 我更改了这一行 selectedRows: [] = [];进入 selectedRows: Array = [];因为它显示错误
    • 酷,它工作!但是我如何在重复时给每个复选框默认值?我想给它假
    • 代码已根据您的评论进行更新。唯一的区别是:在 ngOnInit() {} 回调中初始化您的模型并使用 [checked] 属性提供默认值。
    • 谢谢@suneet Bansal。请再问一个问题,如何将复选框中的真假值替换为0或1?
    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2018-09-02
    • 2016-12-29
    • 2019-08-12
    相关资源
    最近更新 更多