Angular 2表单序列化为JSON格式

19

我在创建Angular 2表单并将提交的数据转换为JSON格式以便提交到我的API时遇到了一些问题。我正在寻找与此示例非常相似的东西: $.fn.serializeObject = function() http://jsfiddle.net/sxGtM/3/
这个示例的唯一问题是代码是使用JQuery编写的,而我想要严格使用Angular 2。 非常感谢任何帮助,我对Angular还是很陌生的。


如果您正在使用Angular,那么为什么您的输入框中没有ngModel呢? - Gaurav Srivastava
因为这是我找到的一个示例,不是我的代码。我想使用Angular 2实现类似于这个示例的东西。 - Tristan C
3个回答

36

如果您正在使用FormGroup,可以使用getRawValue()函数返回一个对象,然后可以使用JSON.stringify()进行序列化。

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder } from '@angular/forms';
import { Http } from '@angular/http';

@Component({
    selector: 'my-component',
    templateUrl: 'my-component.component.html'
})
export class MyComponent implements OnInit {

    form: FormGroup;

    constructor(private fbuilder: FormBuilder,
                private http: Http) { }

    ngOnInit(){
        this.form = this.fbuilder.group({
            name: '',
            description: ''
        });
    }

    sendToAPI(){
        let formObj = this.form.getRawValue(); // {name: '', description: ''}

        let serializedForm = JSON.stringify(formObj);

        this.http.post("www.domain.com/api", serializedForm)
            .subscribe(
                data => console.log("success!", data),
                error => console.error("couldn't post because", error)
            );
    }
}

8
您可以使用 JSON.stringify(form.value)
submit() {
  let resource = JSON.stringify(this.form.value);

  console.log('Add Button clicked: ' + resource);

  this.service.create(resource)
    .subscribe(response => console.log(response));
}

在Chrome DevTools中的结果: console.log的结果

1
你正在寻找JSON.stringify(object),它将为您提供JavaScript对象的JSON表示形式。然后,您可以使用内置的HTTP服务将其POST到您的服务器。

FormGroups 可以并且通常包含循环引用,因此除非您自定义 stringify 函数,否则此解决方案将无法工作。 - Nick Betcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接