みなさん one-time binding 使ってますか?expression の値の変更がないとわかっている時に、初回以降 watch 対象から外してくれる便利なやつです。
さらに非同期にデータを取得するケース等を見越して、expression の評価結果が undefined
の間は watch し続けて、データが入ってきたら watch 対象から外すという、かゆいところに手が届く仕様です。ところが、この仕様が仇になるケースに行き当たったので紹介します。
以下は何気ないテンプレートですね。obj.prop
に値が入っていたら Something を表示するというものです。
<div ng-if="::obj.prop">Something</div>
基本的には期待通りに動くのですが、非表示の時になぜか watch 対象のままになっているのです・・・。
そう!undefined
の間は watch され続けるのでした。しっかり boolean に変換しましょう。
<div ng-if="::!!obj.prop">Something</div>
ここに ::!!
という謎の記号が爆誕しました!Ruby の &.
はぼっち演算子というそうですが ::!!
は何と呼んだら良いでしょうか・・・。