みなさん 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 の &. はぼっち演算子というそうですが ::!! は何と呼んだら良いでしょうか・・・。