Я использую Bootstrap и Angular.Получить переменную javascript, указывающую текущий тип @media
Я в настоящее время имеют нг-повтор, который установлен вверх, как это:
<div class="row">
<div ng-if="viewType == 'grid'">
<div ng-repeat="product in filteredProducts | filter:search" >
<product-tile-view class="hidden-print col-lg-2 col-md-3 col-sm-4 col-xs-6" product="product" on-selected="deviceSelected(product)" on-compare="compare(product)"></product-tile-view>
<product-tile-view class="visible-print-block col-xs-4" product="product" on-selected="deviceSelected(product)" on-compare="compare(product)"></product-tile-view>
<div class="clearfix visible-lg" ng-if="($index + 1) % 6 == 0"></div>
<div class="clearfix visible-md" ng-if="($index + 1) % 4 == 0"></div>
<div class="clearfix visible-sm" ng-if="($index + 1) % 3 == 0"></div>
<div class="hidden-print clearfix visible-xs" ng-if="($index + 1) % 2 == 0"></div>
<div class="visible-print-inline clearfix visible-xs" ng-if="($index + 1) % 3 == 0"></div>
</div>
...other unreleated code, divs are closed.
Это на самом деле работает. Чтобы дать краткое объяснение того, что он делает:
В зависимости от размера экрана строки содержат 6 элементов (lg-2), 4 элемента (md-3), 3 элемента (sm-4) или 2 элемента (XS-6). Основано на ширине бутстрапа шириной в 12 столбцов. Clearfix работает для сброса строки, она видна только для соответствующего размера экрана, а ng-if добавляет ее только к dom, когда индекс соответствует соответствующей строке.
В зависимости от типа носителя (браузера или принтера) добавляется дополнительный загрузочный css. Это связано с тем, что bootstrap обрабатывает весь размер экрана принтера как xs. Я хочу, чтобы при печати печаталось 3 элемента в строке (вместо 2). Чтобы добиться этого, я скрываю директиву при печати при печати и показываю директиву только с определением col-xs-4. Я также скрываю исходное xs clearfix при печати и показываю одно подходящее с col-xs-4.
Все это работает, но проблема в том, что эти классы cssssstrap media css скрываются/отображаются. Это означает, что за сценой есть значительное количество лишнего мусора DOM, который скрыт.
Чтобы обойти мою точку зрения. В настоящее время я отлично разбираюсь в скрытых очищающих экранах экрана, но я бы хотел использовать ng-if вместо классов hidden-print/visible-print, чтобы не дважды писать директиву в DOM.
Каков наилучший способ получить переменную, представляющую текущий тип носителя (принтер/браузер)? Я хочу использовать его как <ng-if currentMediaType == 'print'>
, если это возможно.
I t стоит отметить, что это не работает в версиях IE до IE10. –
Затем вы можете увидеть https://github.com/paulirish/matchMedia.js – CStff