Angulaire 2: TypeError: l_thing0 est pas défini dans [{{chose.titre}} en AppComponent@4:44]
J'ai une erreur étrange dans mon application. Il est censé imprimer {{thing.title}}
à partir d'un objet, mais il affiche une erreur dans la console:
EXCEPTION: TypeError: l_thing0 is undefined in [{{thing.title}} in AppComponent@4:44]
Je ne suis pas sûr de l'endroit où l_thing0
vient de. Si j'essaie de montrer {{thing}}
dans la page, il affiche [object Object]
. Si j'essaie de JSON.stringify(this.thing)
(voir la showObj()
fonction), il affiche correctement le stringified objet. Mais si je tente d'accéder à un attribut comme {{thing.title}}
je reçois le message d'erreur que l_thing0
est pas défini.
Ici est d'application.composante.ts:
import {Component, OnInit} from 'angular2/core';
import {Thing} from './thing';
import {ThingService} from './thing.service';
import {SubThingComponent} from "./subthing.component";
@Component({
selector: 'thing-app',
template: `
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>{{thing.title}} <a href="#" (click)="showObj()" class="btn btn-default">Show Stringified Obj</a></h1>
<subthing></subthing>
</div>
</div>
</div>
`,
styles:[`
`],
directives: [SubThingComponent],
providers: [ThingService]
})
export class AppComponent implements OnInit {
constructor(private _thingService: ThingService) { }
public thing: Thing;
showObj() {
//This correctly shows the stringified object
alert(JSON.stringify(this.thing));
}
getThing() {
this._thingService.getThing().then(thing => this.thing = thing);
//This correctly logs the object
setTimeout(() => {console.log('thing', this.thing)}, 5000);
}
ngOnInit() {
this.getThing();
}
}
Des idées?
- Est-ce à
{{thing?.title}}
fait disparaître l'erreur? - Oui, merci. J'ai juste compris. (au bout de 7 heures. :/ )
- np, essayez de ne pas obtenir utilisé à l'opérateur si, j'ai posté une meilleure solution pour elle.
- Bonne idée. Merci.
Vous devez vous connecter pour publier un commentaire.
Le problème est que la première fois que vous chargez la page,
thing
est toujours pas défini, il est défini à sa valeur réelle, plus tard, sur asyncronously, de sorte que la première fois qu'il tente d'accéder à la propriété, il lèvera une exception. Le?
elvis opérateur est un raccourci vers un nullcheck:{{thing?.title}}
Mais est généralement une meilleure idée plus performant même pas essayer de rendre le composant à tous jusqu'à ce que l'objet réel en ajoutant quelque chose comme:
<h1 *ngIf="thing">
pour le conteneur.
*ngIf
au lieu de?
droit ?si je suis arrivé en retard à la fête, mais pensé que cela pourrait aider pour ceux qui sont à l'aide Angulaire 5.
Étrangement remarqué la elvis opérateur ne fonctionne pas dans l' *ngFor boucle, mais travaille pour *ngif. Alors, voici mon code pour résoudre le problème.
Vous pouvez aussi définir une nouvelle variable
isFinished
àfalse
avant de récupérer les données à partir du serveur ou asynchrone en fonction et après réception de l'ensemble de données àtrue
. Ensuite, mettreisFinished
variable dans*ngIf
pour vérifier si le serveur de la fonction/le processus est fait?Je suis en utilisant Angulaire de 8 et, bien que les données s'affichent, j'ai aussi eu cette erreur et googler ça m'a apporté à cette question. La accepté de répondre (même si bien expliqué) ne résout pas pour moi. (Peut-être parce que d'une version plus récente, ou les utiliser avec *ngFor)
Il ne suffit pas de simplement utiliser *ngIf, comme vous pouvez le voir:
déclenche une erreur: v1
déclenche une erreur: v2
déclenche une erreur: v3
pas d'erreur: v1
pas d'erreur: v2
pas d'erreur: v3