2015-03-19 15 views
8

È possibile utilizzare ng-if per non caricare molto semplicemente un elemento per schermi di dimensioni inferiori?È possibile utilizzare ng-if per le dimensioni dello schermo

+1

Sembra un [CSS media query] (https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries) sarebbe più semplice. –

+1

Se è davvero necessario, è possibile il ['$ window' servizio] (https://docs.angularjs.org/api/ng/service/$window) per ottenere la finestra attuale e ng-se da lì. – ryanyuyu

+3

Sto anche usando il bootstrap, quindi nascondere le cose è facile. Stavo pensando da quando ng-se non nasconde solo gli elementi, ma li esclude dal DOM, risparmierebbe sui tempi di caricamento dei dispositivi mobili. –

risposta

4

Un'alternativa a ng-if, è che se si utilizza il materiale angolare per il layout, forniscono direttive nascoste e visualizzate per controllare la visibilità degli elementi in base alle dimensioni dello schermo.

Ad esempio:

<div hide-gt-sm>You'll only see me on small screens</div> 
<div show-gt-lg>You'll only see me on big screens</div> 

Documenti:

https://material.angularjs.org/latest/layout/options

+0

Questa è la risposta giusta –

+2

Questa soluzione nasconde solo l'elemento (visualizzazione: nessuno). Vuole rimuovere dal DOM, la soluzione migliore per me è stata l'utilizzo di supporti angolari. –

5

È possibile utilizzare angular-match-media per questo.

Nel controller è possibile creare variabili che corrispondono alle dimensioni dello schermo. Per esempio aggiungere il seguente al controllore:

// Using static method `is` 
angular.module('myApp', ['matchMedia']) 
.controller('mainController', ['screenSize', function(screenSize) { 
    $scope.isScreenSize = screenSize.is; 
}]); 

Poi, nel tuo HTML è possibile mostrare o nascondere contenuti utilizzando ngIf o simili direttive che assumono un'espressione angolare:

<img ng-if="isScreenSize('md, lg')" ng-src='http://example.com/path/to/giant/image.jpg'> 

Questo particolare esempio è grande per caricare solo immagini grandi e non necessarie sui computer desktop.

Nota: è importante se si prevede di utilizzare screensize.is() nelle direttive per assegnare il valore restituito a una variabile con ambito. Se non lo fai, verrà valutato una volta sola e non verrà aggiornato se la finestra viene ridimensionata o se un dispositivo mobile viene ruotato di lato.

+0

Bello! Potrei anche fare un ulteriore passo avanti e creare la tua versione di questo plugin per il massimo controllo. Potrebbe anche essere una direttiva utilizzabile in modo simile al bootstrap che aggiunge classi hidden-sm. io sono hide-if-mobile, show-if-iphone hide-if-desktop ecc. ecc – zilj

Problemi correlati