Ich versuche, ein Objekt mit JSON
zu stringifizieren, aber wenn ich meine Seite lade, wird folgende Fehlermeldung angezeigt:
TypeError: _co.JSON ist undefiniert
Der Stacktrace ist riesig und ich denke nicht, dass es nützlich wäre, ihn einzuschließen.
Dies ist der Code, der den Fehler auslöst:
<div *ngFor="let asset of getAssets()">
{{ JSON.stringify(asset) }}
</div>
Die Elemente in dem Array, die von meinem CodeBehind zurückgegeben werden, sind alle korrekte Objekte.
Dies ist die Ausgabe von ng --version
:
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 1.7.4
Node: 8.9.1
OS: win32 x64
Angular: 5.2.9
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
@angular/cli: 1.7.4
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.5.3
webpack: 3.11.0
3 Antworten
Das Problem war, dass ich versuchte, ein Array innerhalb eines Promise.then
Codeblocks zu manipulieren. Das Refactoring zur Verwendung von await
hat mein Problem behoben.
Also statt:
getAssets() {
assetSet = new Set();
for (let asset of this.assets) {
assetSet.add(JSON.parse(asset);
}
return Array.from(assetSet);
}
onSearchInputChange() {
somePromiseFunction().then(response => this.assets = response);
}
Ich benutzte:
getAssets() {
assetSet = new Set();
for (let asset of this.assets) {
assetSet.add(JSON.parse(asset);
}
return Array.from(assetSet);
}
async onSearchInputChange() {
this.assets = await somePromiseFunction();
}
JSON ist in der Vorlage nicht bekannt, aber Sie können json pipe ausprobieren:
{{ asset | json }}
Der Kontext in Ihrer Komponentenvorlageninterpolation ist das "Dies" der Komponente. kein Fenster Objekt.
Wenn Sie dies tun möchten, müssen Sie JSON in Ihrer Komponentenklasse "deklarieren"
@Component({...})
export class MyComponent {
private JSON = window.JSON;
...
}