LoginSignup
9
9

More than 5 years have passed since last update.

AngularJS の ng-if で one-time binding を使う時は必ず boolean になるようにしよう

Last updated at Posted at 2016-01-06

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

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9