J'ai des problèmes avec une application .net core SPA .- Les résultats sont renvoyés par l'appel de l'API - Le SPA ne gère pas les résultats.
voici le code pertinent:
SPA ts:
class TestLibraryItem {
private _apiPath: string;
private _http: HttpClient;
public name: string;
public testResults: TestResult;
constructor(name: string, apiPath: string, http: HttpClient) {
this.name = name;
this._apiPath = apiPath;
this._http = http;
}
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
console.log(this.testResults.CheckName);
});
}
}
class TestResult {
CheckName: string;
Checks: CheckResult[];
}
class CheckResult {
Test: string;
Pass: boolean;
}
et la console résulte lorsque RunTests () est déclenché:
{"CheckName":"Check One","Checks":[{"Test":"Test one","Pass":true},{"Test":"Test two","Pass":true}]}
undefined
Autant que je sache, je récupère un json valide de l'API (indiqué par console.log en le crachant, mais il ne s'agit pas de la construction de l'objet qui aboutit à l'indéfini.
Vous êtes indéfini car ce fichier console.log (this.testResults) est déclenché en premier
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
console.log(this.testResults.CheckName === undefined ? '' : this.testResults['CheckName']);
});
}
ou utilisez SetTimeOut
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
setTimeout(()=>{console.log(this.testResults['CheckName'])},2000);
});
}
Je pense que vos propriétés dans leJSONsont analysées des majuscules aux minuscules - CheckName -> checkName
. Comme Javascript/TypeScript est un langage sensible à la casse, vous devez utiliser différents noms de propriété.
Essayez de vous connecter avec des minuscules et modifiez également les noms de vos propriétés pour commencer par des minuscules. C'est un standard commun dans Javascript/TypeScript
de démarrer les noms de fonction et de variable/propriété via des minuscules.
console.log(this.testResults.checkName);
J’avais un problème similaire, c’est-à-dire qu’il semblait être une réponse valide mais qu’il s’agissait en fait d’une réponse "texte". Essayez ce qui suit:
getdData(inParams) {
let headers = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json');
// need responseType = text (non object)
return this.http.get(environment.url, {
headers,
responseType: 'text'
});
}