日々精進

新しく学んだことを書き留めていきます

ng-optionsをやめてtext bindingだけにすると超速くなる

AngularJSは何も考えずに作ると結構重くなる。。 <select ng-options...>タグが100個ぐらいある画面をIEで開くと操作可能になるまで20秒ぐらいかかった。

ただ、画面仕様的になぜか入力することは無く常にselectタグはdisableになっている仕様だったので、 h5タグで書き直したら20秒が300msになった。約70倍も違うとは。。

あとIEとChromeでパフォーマンス10倍程度違った。対応ブラウザChromeだけにしたい。。

one time bindingも試してみたけどあまり変わらなかった。

参考:

liginc.co.jp

Bootstrapの<div class="row">が画面より大きい理由

rowクラスは左右に-15pxのマージンを持っており、rowの親Elementより大きい。 その理由は、列の左右にガター領域を確保するため。グリッドFWはすべてガターがあるらしい。 うーん、まだグリッドシステムとBootstrapをちゃんと理解できてないな。。

参考:

stackoverflow.com

Bootstrapで<div class="row">をoverflow-y: auto;なdivの中に置くと横スクロールバーが出る

原因はrowクラスが左右に-15pxのマージンを持っており、

自体は親Elementからはみ出しているため。

以下によると、新しいバージョンのBootでは解決しているようなので、Bootstrapのバージョンを上げたら直る。

stackoverflow.com

それが難しいようなら以下を定義すると直る。

.container-fluid {
    padding-right: 15px;
    padding-left: 15px;
    margin-right: auto;
    margin-left: auto;
}

でもBootstrapのクラスを上書きしたくない。。

dirty & quickなやり方としては以下をrow divの親Elementに追加するやり方がある。

overflow-x:hidden

これはスクロールバーを無理矢理隠してるだけなのであまりやりたくないが。。

参考:

focusの当たっている要素を取得する方法

// フォーカスが当たっている要素を取得する
var $focused = $(':focus');

// jQueryを使わない場合
var focused = document.activeElement;

// フォーカス当たっているかどうかを判定する
var hasFocus = $('foo').is(':focus');

// jQueryを使わない場合
elem === elem.ownerDocument.activeElement;

jQuery使わなくても出来るのかー。なるほど。

参考:

Angularの$http.get(...).successと$http.get(...).thenでは渡される引数が違う

ちょっと勘違いしていたんだけど、successの定義は以下のようになっていてdataにhttp bodyが入る。

success(data: any, status: number, headers: ng.IHttpHeadersGetter, config: ng.IRequestConfig)

thenの場合は以下のようにresponseが引数として渡される。response.dataにhttp bodyが入る。successの引数も入っている。例えばstatusはresponse.statusに入っている。

then(response: any)

http bodyにdataなんて項目ないのになぜresponse.dataが。。となってしまった。

参考: