私はブートストラップと角度を使用しています。現在の@mediaタイプを示すjavascript変数を取得します
私は現在セットアップされ、このようにngのリピートを持っている:
<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はインデックスが適切な行と一致するときにng-ifをdomに追加します。
メディアタイプ(ブラウザまたはプリンタ)によっては、追加のブートストラップCSSが追加されます。これは、ブートストラップがすべてのプリンタ画面サイズをxsとして扱うためです。印刷するときに1行につき3つのアイテムが必要です(2の代わりに)。これを達成するために、私は印刷時に応答指令を隠し、col-xs-4だけを定義した指令を表示します。また、印刷時に元のxs clearfixを隠し、col-xs-4に適切なものを表示します。
これらはすべて動作していますが、問題はこれらのブートストラップメディアのCSSクラスが非表示になっていることです。シーンの背後には、隠されている余分なDOMゴミがかなり多くあります。
私の所在地を知りたい。私は今、隠された画面サイズのclearfixesでうまくいますが、hidden-print/visible-printクラスの代わりにng-ifを使用して、DOMにディレクティブを2度書き込まないようにしたいと考えています。
基本的に現在のメディアタイプ(プリンタ/ブラウザ)を表す変数を取得する最も良い方法は何ですか?可能ならば<ng-if currentMediaType == 'print'>
のように使いたいです。
I(このコードはまた、デバウンス、forEachの、および他の有用なユーティリティのためlodashライブラリを利用することに注意):大きさ、および使用/検索のために格納されていますIE10より前のバージョンでは動作しません。 –
次に、https://github.com/paulirish/matchMedia.jsを見ることができます – CStff