2016-01-07 17 views
12

La mia componente è definita in questo modo:Angular 2 [hidden] sembra non funzionare?

import { Component } from 'angular2/core' 

@Component({ 
    selector: 'sidebar', 
    templateUrl: 'js/app/views/sidebar.html', 
}) 
export class SidebarComponent { 
    public sections: boolean[] = [ 
     true, 
     false, 
     false, 
     false, 
     false, 
     false, 
     false, 
     false 
    ]; 
} 

Il modello sidebar.html:

<h3 class="proofTitle">...</h3> 
<p [hidden]="sections[0]"> 
    ... 
</p> 
<p [hidden]="sections[1]"> 
    ... 
</p> 
... 
<p [hidden]="sections[7]"> 
    ... 
</p> 

sembra abbastanza semplice, ma per qualche ragione, è che mostra tutte le sezioni ... quello che mi manca ?

+1

Hai controllato se l'attributo nascosto viene aggiunto agli elementi del DOM? (in devtools) –

+1

Sì, lo è .... e con questo ho individuato anche il mio errore ... il 'boolean array' deve avere i suoi valori invertiti ... duh –

risposta

5

In effetti, per nascondere gli elementi che utilizzano l'attributo HTML5 hidden, il valore true deve essere restituito dall'espressione. In questo caso, l'attributo sarà presente nel DOM in memoria. Quando il valore è false, l'attributo non è presente e l'elemento è visibile.

Spero che ti aiuta, Thierry

30

Assicuratevi di non avere una regola CSS display tuoi <p> tag che ignorare hidden comportamento simile:

p { display: inline-block !important; }

Poiché l'attributo hidden html si comporta come display: none

+0

Non capisco il tuo punto @MarkRajcok, angular2 aggiunge o rimuove l'attributo html 'hidden' a seconda dell'espressione che segue con questa sintassi. E la mia risposta parla di un errore non correlato all'angolare. Si tratta del suo comportamento che potrebbe essere annullato da una regola CSS. https://davidwalsh.name/html5-hidden – bertrandg

+1

Scusa, ho letto la tua risposta troppo velocemente ... Ho pensato di leggere "assicurati di avere" non "essere sicuro di non avere" ... il mio errore. Ho rimosso il mio commento. –

+0

Grazie mille !!! Ha davvero aiutato –

9

se la proprietà display: none è prioritaria utilizzare *ngIf="false"

+2

Nascosto è diverso da * ngIf. [hidden] nascondi un elemento, invece, ngIf ricrea un elemento ogni volta che l'espressione viene impostata su true. Quindi è più costoso e non dovrebbe essere usato al suo posto. Dovresti ora dove usare l'uno o l'altro. –

+0

per evitare comportamenti indesiderati css, si consiglia di utilizzare ngIf anziché nascosto qui: http: //angularjs.blogspot.fr/2016/04/5-rookie-errors-to-avoid-with-angular.html (vedi la prima sezione) – boly38

3

Proprio aggiungi questo codice:

p[hidden] { display: none; } 

alFile.

1

In alternativa, utilizzare questo:

[style.display]="sections[i] ? 'none' : 'block'"