Ich bin neu in Angular, so dass ich Probleme habe, herauszufinden, wie ich meine Fragen für das, was ich erreichen möchte, formulieren kann, aber hier geht es.Angular 2 - Anzeigen eines einzelnen Datensatzes
Ich habe eine Komponente, die einen einzelnen Benutzerdatensatz von einem Dienst abruft. Ich möchte diese Benutzerdetails dann auf meiner Benutzeroberfläche anzeigen. In anderen Teilen meines Codes waren sie immer mehrere Datensätze, also habe ich *ngFor
verwendet und über das Datenfeld geloopt. Da dies jedoch nur ein einziges Ergebnis ist, bin ich mir nicht sicher, wie dies zu erreichen ist.
Komponente:
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { UserRecord } from '../shared/user-record.interface';
import { UserService } from '../shared/user.service';
@Component({
selector: 'app-view-record',
templateUrl: './view-record.component.html',
styleUrls: ['./view-record.component.css']
})
export class ViewRecordComponent implements OnInit {
private record: UserRecord[];
private errorMessage: any = '';
private loaded = false;
private RecordID: number; // User ID of who we are looking at
constructor(private _crudService: UserService,
private activatedRoute: ActivatedRoute) { }
ngOnInit() {
// Get the userID from the activated route
this.activatedRoute.params.subscribe((params: Params) => {
this.RecordID = params['id'];
});
// Call our service and pass the userID
this._crudService.getRecord(this.RecordID)
.then(res => {
this.record = this._crudService.record;
return this._crudService.getRecord(this.RecordID);
})
.then(res => {
console.log(this.record)
this.loaded = true;
})
.catch(err => { console.error(err); });
}
}
Service:
getRecord(userID: number) {
const headers: Headers = new Headers({
"Authorization": this._frameworkService.getSessionInfo().token
});
return new Promise((resolve, rejects) => {
this._http.post(this.baseUrl + '/fetchRecord', { "userID": userID }, { "headers": headers })
.map(res => res.json())
.subscribe((data) => {
if (data) {
this.record = data;
}
resolve(true);
});
});
}
Schnittstelle:
export interface UserRecord {
RecordID: number;
QID: string;
FavoriteColor?: string;
FavoriteNumber?: number;
FavoriteActor?: string;
MetaInsertUTC: string;
MetaUpdateUTC: string;
FirstName: string;
LastName: string;
NTID: string;
}
Service-Ergebnis:
[
{
"RecordID":"55",
"QID":"Q00019204",
"FavoriteColor":"Blue",
"FavoriteNumber":"6",
"FavoriteActor":"Bob",
"MetaInsertUTC":"2017-06-29 18:47:01.750",
"MetaUpdateUTC":null,
"FirstName":"Jim",
"LastName":"Bobs",
"NTID":"bobby"
}
]
In meinem Component HTML, ich habe {{record.FirstName}}
versucht, aber den Fehler von ViewRecordComponent.html:16 ERROR TypeError: Cannot read property 'FirstName' of undefined
erhalten.
Da dies nicht eine Reihe von Daten Ergebnisse ist, sehe ich nicht, wie *ngFor
im Anwendungsfall anwendbar wäre.
Ich nahm an, dass ich, da meine Komponente die Daten im Objekt record
speichert, in der Lage sein sollte, über die Benutzeroberfläche darauf zuzugreifen? Die console.log
zeigt alle korrekten Datenpunkte.
Wie würde ich die Benutzer FirstName
in meiner Komponente HTML referenzieren? Hoffentlich bin ich zumindest auf dem richtigen Weg.
Also habe ich versucht, '
', die meine Daten umschließt. Ich setze dies im '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '(' '' '' '' '' '' '' '' '' '' ''). Während der Fehler nicht mehr in der Konsole ausgegeben wird, wird der Datenpunkt ebenfalls nicht angezeigt. Ein kleiner Fortschritt, nehme ich an. – SBBWarum eine separate Eigenschaft verwenden? Überprüfen Sie einfach Ihre Eigenschaft "Datensatz". Dann müssen Sie sich keine Gedanken über das Setzen/Löschen der geladenen Eigenschaft machen. – DeborahK
Guter Punkt, ich habe das geändert. Ich werde mit der Ergebnismenge herumspielen, jetzt da der Fehler weg ist, und versuchen herauszufinden, warum sie nicht angezeigt wird. Danke für den Tipp! – SBB
Verwandte Themen