2017-12-27 2 views
0

Ich habe ein seltsames Problem beim Ausfüllen eines Modells aus einem API-Ergebnis.Typescript mit Angular 2 Problem auf boolean

Mein Modell sieht wie folgt aus:

import {Company} from './../api/odata/data/Company'; 

export class MyModel { 
... 
isEnabled = false; 
.... 
    constructor(data: Company= null) { 
     try { 
      this.isEnabled = !data.isDisabled; 
      ... 
     } 
     ... 
} 

Wenn ich das Datenmodell zu füllen, wenn data.isDisabled falsch entspricht, sollte this.isEnabled wahr sein, aber es wird false zurückgibt ...

enter image description here

enter image description here

Antwort

3

data.isDisabled ist ein String Kumpel. Sie können es auf mehrere Arten in einen booleschen Wert konvertieren. Aber ich bin neugierig, woher die Daten kamen.

Wenn es keine Möglichkeit gibt, sicherzustellen, data.isDisabled kommt als boolean, könnten Sie zwei Dinge tun.

1- Überprüfen Sie, was der Strings-Wert ist und basierend darauf einen booleschen Wert zurückgibt.

this.isEnabled = data.isDisabled === 'true' ? false : true 

2- Oder verwenden eval, die ich nicht

this.isEnabled = eval(data.isDisabled); 

3- rückwärts kompatible Lösung empfehlen würde, am besten von allen drei

Dies wird auch funktionieren, wenn isDisabled eine tatsächliche boolean ist.

this.isEnabled = !JSON.parse(data.isDisabled); 

Mehr auf Zeichenfolge boolean Umwandlung here

+0

Vielen Dank für Ihre Hilfe, aber ich bekomme einen „Operator‚===‘kann nicht auf Typen‚boolean‘und angewendet werden‚‚true‘‘.“ Wenn ich Ihre erste Lösung versuche, und in der Company oData Klasse, isDisabled als boolean deklariert –

+0

Die Typdefinition von 'isDisabled' ist eindeutig falsch, sonst würde der Javascript-Debugger nicht zeigen Sie eine' string' Wie wäre es, das zu beheben? : D – Abdel

+0

danke, nachdem ich es geändert habe, behebt das Problem, ich werde die API-Entwickler bitten, dies zu ändern, ist es nicht normal, eine Zeichenfolge für einen booleschen Wert –