2016-05-18 53 views
29

Provare a scrivere una pipe Angular 2 che prenderà una stringa di oggetto JSON e la restituirà piuttosto stampata/formattata per la visualizzazione all'utente.Angolare 2 pipe che trasforma l'oggetto JSON in JSON piuttosto stampato

Per esempio, ci vorrebbe questo:

{ "id": 1, "numero": "K3483483344", "stato" : "CA", "attivo": true }

E restituire qualcosa che assomiglia a questo quando visualizzato in HTML:

enter image description here

Quindi a mio avviso ho potuto avere qualcosa di simile:

<td> {{ record.jsonData | prettyprint }} </td> 
+1

sembra come se si desidera creare un tubo personalizzato. ecco alcuni documenti: https://angular.io/docs/ts/latest/guide/pipes.html#!#custom-pipes. provalo e se ti imbatti in problemi sentiti libero di postare una domanda più specifica – danyamachine

risposta

116

Vorrei aggiungere un modo ancora più semplice per fare questo, utilizzando il built-in json pipe:

<pre>{{data | json}}</pre> 

In questo modo, la formattazione viene mantenuta.

+1

funziona se il tuo 'dati' è un' oggetto' – maxbellec

+0

grazie. questo ha funzionato –

+0

Grazie questo è perfetto! – laurent

7

vorrei creare un tubo personalizzato per questo:

@Pipe({ 
    name: 'prettyprint' 
}) 
export class PrettyPrintPipe implements PipeTransform { 
    transform(val) { 
    return JSON.stringify(val, null, 2) 
     .replace(' ', '&nbsp;') 
     .replace('\n', '<br/>'); 
    } 
} 

e usarlo in questo modo:

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div [innerHTML]="obj | prettyprint"></div> 
    `, 
    pipes: [ PrettyPrintPipe ] 
}) 
export class AppComponent { 
    obj = { 
    test: 'testttt', 
    name: 'nameeee' 
    } 
} 

Vai a questa plunkr: https://plnkr.co/edit/WbywRZTrpBoX3UsROYuS?p=preview.

+0

Worked! Avevo una stringa JSON, non un oggetto JSON, quindi ho dovuto aggiungere questa riga prima di chiamare JSON.stringify: var jsonObject = JSON.parse (jsonString); – Derek

+0

Sintassi imprevista, mi aspetto che l'uso sia più simile all'utilizzo di una pipe standard: '

{{obj | prettyprint }}
' ma ha funzionato! –

+1

Come @ shane-hsu indica, esiste un tubo 'json' incorporato, come in Angular 1. –