2015-06-09 31 views
15

Sto cercando di utilizzare la proprietà Hidden in Angular2 e quando includo uno stile che altera la visualizzazione del DIV, la proprietà nascosta viene ignorata.Angular2 Hidden Ignores

Quando viene eseguito il codice seguente, vengono visualizzati entrambi i div. Quando rimuovo la classe .displayInline il primo DIV è nascosto e il secondo è visualizzato (come previsto).

Posso utilizzare Hidden e il display CSS insieme?

import {ComponentAnnotation as Component, ViewAnnotation as View, bootstrap, NgIf} from 'angular2/angular2'; 

@Component({ 
    selector: 'hello' 
}) 
@View({ 
    template: `<style>.displayInline{ display:inline }</style><span *ng-if="name">Hello, {{name}}!</span> 
    <div> 
       <div [hidden]="hideDiv1()" class="displayInline">should be hidden.</div> 
       <div [hidden]="hideDiv2()" class="displayInline">should be displayed.</div> 
    </div>`, 
    directives: [NgIf] 
}) 
export class Hello { 
    name: string = 'World'; 
    constructor() { 
     setTimeout(() => { 
      this.name = 'NEW World' 
     }, 2000); 
    } 

    hideDiv1(){ 
     return true; 
    } 

    hideDiv2(){ 
     return false; 
    } 
} 

bootstrap(Hello); 

Repository: https://github.com/albi000/ng2-play

+0

Vedere anche http://stackoverflow.com/a/35578093/873282 – koppor

risposta

15

Nota: di default <span> s' a "display: inline", si consiglia di utilizzare loro, invece.

Attualmente le classi eseguono l'override [nascosto]. Sono d'accordo, non è così efficace come ng-hide/ng-show e spero che sia corretto nelle versioni future di angular2. Attualmente è an open on issue on the Angular2 repo.

È possibile superare il problema semplicemente avvolgendo il proprio elemento [nascosto] con la classe.

<span class="someClass"> 
    <span [hidden]="hideDiv1()">should be hidden.</span> 
</span> 
+0

Il problema referenziato è stato chiuso e ho il sospetto che sia stato arrotolato con un lavoro 'aria-nascosto'. Ho chiesto dei chiarimenti. Vedi [differenze] (https://www.paciellogroup.com/blog/2012/05/html5-accessibility-chops-hidden-and-aria-hidden/). – Stajs

+0

Funziona ma se scriviamo il tag 'span' all'interno di un' tr' di una 'tabella', si rompe la riga della tabella. Come posso risolvere questo? – essaji

10

È possibile utilizzare style.display invece di hidden se avete bisogno di un controllo più fine su visibilità.

<div [style.display]="active?'inherit':'none'"></div> 
+0

Questo è ottimo per sostituire in modo efficiente * ngIf = "attivo" quando il div ha un componente nidificato che deve essere riavviato –

28

ho affrontato problema simile con classe btn di bootstrap

<button [hidden]="!visible" class="btn btn-primary">Click</button> 

Ho risolto questo aggiungendo

[hidden] { 
    display: none; 
} 

alla fine del foglio di stile css utilizzo globale. Questo è risolto il problema per ora.

+0

Questo è buono ma, dipende dalla specificità. Nel mio caso non ha funzionato perché è stato cancellato. – Kugel

+4

puoi usare 'display: none! Important;' still –

+0

funziona bene! Grazie –