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
0
Titulum 18 Apr. 2018 im 15:18

3 Antworten

Beste Antwort

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();
}
0
Titulum 18 Apr. 2018 im 12:25

JSON ist in der Vorlage nicht bekannt, aber Sie können json pipe ausprobieren:

{{ asset | json }}
2
Fateme Fazli 18 Apr. 2018 im 12:23

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; 
    ...
}
1
Pierre Mallet 18 Apr. 2018 im 12:24