私は、角度2のupdate/PUTに問題があります。member-detail.component.tsファイルに関数updateMember()を作成します。角度2のUpdate/PUT json
app/members/member-detail.component.ts(51,42): error TS2345: Argument of type 'Member[]' is not assignable to parameter of type 'Member'. Property '_id' is missing in type 'Member[]'.
app/members/member-detail.component.ts(53,17): error TS7006: Parameter 'res' implicitly has an 'any' type.
app/members/member-detail.component.ts(56,17): error TS7006: Parameter 'error' implicitly has an 'any' type.
member.model
export class Member {
constructor(
public _id: string,
public name: string,
public old: number
) { }
}
:tslintコードは、いくつかのエラーを返すcosoleとき機能は、正しいオブジェクトを取得し、それをサーバーに送るが、members.service
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Member } from './member';
import { Observable } from 'rxjs/Rx';
// Import RxJs required methods
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class MembersService {
private apiUrl = 'http://localhost:3000/api/members';
constructor(private http: Http) { }
...
updateMember(member: Member): Observable<Member[]> {
let body = JSON.stringify(member);
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.put(`${this.apiUrl}/${member._id}`, body, options)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || {};
}
private handleError (error: Response | any) {
// In a real world app, we might use a remote logging infrastructure
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
}
メンバー-detail.componentあなた
MemberDetailComponent
インサイド
import { Component, OnInit, Input, trigger, state, style, transition, animate, keyframes } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { Member } from './member';
import { MembersService } from './members.service';
@Component({
moduleId: module.id,
selector: 'member-detail',
templateUrl: 'member-detail.component.html',
styleUrls: [ 'member-detail.component.css' ],
animations: [
trigger('showContent', [
transition('void => *', [
animate(500, keyframes([
style({opacity: 0, offset: 0}),
style({opacity: 0.01, offset: 0.99}),
style({opacity: 1, offset: 1}),
]))
])
])
]
})
export class MemberDetailComponent implements OnInit {
member: Member[];
errorMessage: string;
constructor(private route: ActivatedRoute, private membersService: MembersService) { }
...
// function update but not tslint correct
updateMember() {
this.membersService.updateMember(this.member)
.subscribe(
res => {
this.member = res;
},
error => this.errorMessage = <any>error
);
}
}
回答ありがとうございますが、getMemberメソッドからメンバオブジェクトを参照する方法はありますか? 'getMember(){ this.route.params.subscribe(paramsは=> { IF(paramsは[ 'ID']!==未定義){ this.membersService.getMember(paramsは[ 'ID']) .subscribe( メンバー=> this.member =部材、 誤差=> this.errorMessage =エラー ); }})。 } ' –
@SebastianMałeckiは別の質問です。あなたの質問は、 'getMember()'メソッドについては何も言いません:/それを質問に追加して、もっと明確に見ることができますか? – echonax
getMemberメソッドは、サーバーからのメンバーの属性を持つオブジェクトを取得し、このオブジェクトを 'member:Member [];に設定します。 <--- '私はこのオブジェクトを参照することができます。(Member => this.member = ** member ** < - - updateMemberメソッドに? –