ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

AngularJSで$scopeの配列を空にする方法

タイトルだけを見ると何言ってんだこのアホと思われるかもしれませんが、案外ハマります。

というのもAngularJSでは$scopeにそれぞれ一意のhashkeyが割り振られており、単純に配列を以下のようにしても思うように動作しません。
実際には空になっているのですがhashkeyごと削除されているので値の変化が検知されないからです。

$scope.array = [1, 2, 3];
$scope.array = []; // これはダメ!

ちゃんとhashkeyの一意性を保ったまま空にするには以下のようにします。

$scope.array = [1, 2, 3];
$scope.array.length = 0;
$scope.array.push.apply($scope.array, []);

これは空にする時にかぎらず、配列の中身をまるごと入れ替える時にも有効です。

またオブジェクトをコピーする時も同様の理由でハマリポイントになるので、ちゃんとangular.copyしてあげましょう。