gpt4 book ai didi

json - 如何使用 TypeScript 在 Angular 2 中将对象正确转换为 JSON

转载 作者:IT老高 更新时间:2023-10-28 12:46:41 30 4
gpt4 key购买 nike

我正在创建一个 Angular 2 简单的 CRUD 应用程序,它允许我对产品进行 CRUD。我正在尝试实现 post 方法,以便创建产品。我的后端是一个 ASP.NET Web API。我遇到了一些麻烦,因为将我的 Product 对象转换为 JSON 时它没有正确执行。这预期的 JSON 应该是这样的:

{
"ID": 1,
"Name": "Laptop",
"Price": 2000
}

但是,从我的应用程序发送的 JSON 是这样的:

{  
"product":{
"Name":"Laptop",
"Price":2000
}
}

为什么在 JSON 的开头添加“产品”?我能做些什么来解决这个问题?我的代码:

product.ts

export class Product {

constructor(
public ID: number,
public Name: string,
public Price: number
) { }
}

product.service.ts

import {Injectable}   from '@angular/core';
import {Http, Response} from '@angular/http';
import { Headers, RequestOptions } from '@angular/http';
import {Observable} from 'rxjs/Observable';

import {Product} from './product';

@Injectable()
export class ProductService {

private productsUrl = 'http://localhost:58875/api/products';

constructor(private http: Http) { }

getProducts(): Observable<Product[]> {
return this.http.get(this.productsUrl)
.map((response: Response) => <Product[]>response.json())
.catch(this.handleError);
}

addProduct(product: Product) {
let body = JSON.stringify({ product });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });

return this.http.post(this.productsUrl, body, options)
.map(this.extractData)
.catch(this.handleError);
}

private extractData(res: Response) {
let body = res.json();
return body.data || {};
}

private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server Error');
}
}

创建-product.component.ts

import { Component, OnInit }  from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';

import { Product } from '../product'
import { ProductService } from '../product.service'

@Component({
moduleId: module.id,
selector: 'app-create-product',
templateUrl: 'create-product.html',
styleUrls: ['create-product.css'],
})
export class CreateProductComponent {

product = new Product(undefined, '', undefined);
errorMessage: string;

constructor(private productService: ProductService) { }

addProduct() {
if (!this.product) { return; }
this.productService.addProduct(this.product)
.subscribe(
product => this.product,
error => this.errorMessage = <any>error);
}
}

创建产品.html

<div class="container">
<h1>Create Product</h1>
<form (ngSubmit)="addProduct()">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" required [(ngModel)]="product.Name" name="Name" #name="ngModel">
</div>
<div class="form-group">
<label for="Price">Price</label>
<input type="text" class="form-control" required [(ngModel)]="product.Price" name="Price">
</div>
<button type="submit" class="btn btn-default" (click)="addProduct">Add Product</button>
</form>
</div>

最佳答案

在您的 product.service.ts 中,您以错误的方式使用 stringify 方法..

随便用

JSON.stringify(product) 

而不是

JSON.stringify({product})

我已经检查了您的问题,在此之后它工作得非常好。

关于json - 如何使用 TypeScript 在 Angular 2 中将对象正确转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38372134/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com