2013-11-27 16 views
5

ユーザーをリストに追加して削除できる単純なアプリケーションがあります。アイテムを削除したときに角度範囲が更新されない

新しいユーザーを追加するフォームは、$scope.newPersonにバインドされます。フォームを送信する際に、オブジェクトをpersonオブジェクトを含む配列である$scope.peopleに追加します。

ディレクティブで配列peopleをループし、現在スコープに追加されている人物を表示します。これらの行はすべて削除ボタン(ジェイドスニペット)を持っている:私は、[削除]ボタンをクリックすると

div.row(data-person, ng-repeat="person in people", ng-model="person") 
    button(ng-click="removePerson(person)") Remove 

、私はこの機能を実行します。

​​3210

これは、テーブルから行を削除し、personを設定し、スコープはnullです。その後、Batarangは{ This scope has no models }と表示されます。

しかし、peopleアレイが更新されないことに気付きました。私がBatarangの範囲であることを確認すると、私が削除したばかりの人物はまだ配列に残っています。新しい人物を追加するために入力を開始すると、その人物が更新されます。これを行わずにページ全体を私のサーバーに提出すれば、配列には依然として削除された人が含まれます。

$scope.$apply()person = null;の後に置くと、予想通りの動作が得られますが、エラーはapply is in progressです。私も$apply()と呼ぶことを読んで、自分自身が悪い習慣とみなされます。 (?)

私はAngularを使い慣れていません。この問題を解決するための多くの情報を見つけることはできません。私は人を削除すると、私の配列を更新する方法は?ありがとう。 ng-repeatブロック上

これ以上ng-model

+0

が、それは可能ですか?スコープの問題だと思いますが、スコープ/ディレクティブ/コントローラがどのように設定されているかを確認するために提供した情報には十分な情報がありません。 – dtabuenc

+0

ところで、person = nullは、関数内でpersonをnullに設定する以外は何もしません(関数外の人は変更されません)。また、あなたは正しいです、あなたは決してあなた自身を(外部のイベントに応じて指令の中で)呼び出すべきではありません。 – dtabuenc

答えて

4

を返さない、私はこの問題を解決するには、以下のなかった

div.row(data-person, ng-repeat="person in people") 

ng-clickをリファクタリングremovePerson()のイベント:

<button ng-click="removePerson($index)"> 
    Remove 
</button> 

とこれにremovePerson()コードを変更:

$scope.removePerson = function(index) { 
    $scope.people.splice(index, 1); 
}; 

私は、これはまたBatarangの問題だったことに気づいたので、この実際には固定のものは、私の前のコードと比較するかどうかわかりません。私が単に{{ people }}を自分のHTMLに、またはconsole.log($scope.people)に記録すると、peopleアレイアップデートが表示されます。しかし、Batarangでは、配列は更新されません。

レッスンは学んだ:時々、自分でツールに頼るよりも優れているものをログアウト;)あなたはあなたの問題をdemostrates迅速jsfiddleまたはplnkrを作成するため

-3

スライス法は、あなたの配列を更新、しかし、新しい1

+3

'slice'!=' splice'! – Yoshi

+0

かなり「スライス」ではなく「スプライス」が必要ですか? – cabaret

+0

はい、スプライスは正しいですし、配列を変更しません。 – dtabuenc

関連する問題