2013-04-19 9 views
6

残りのAPIから取得されたユーザーの一覧があります。ここでは、テンプレート angularjs要素が追加/削除されたときにng-repeatリストが更新されない

<div ng:controller="UserController"> 
    <a ng-click="createUser()">Create User</a> 

    <div ng-view> 
     <ul> 
      <li ng-repeat="user in users"> 
       {[{user.first_name}]} {[{user.last_name}]} 
      </li> 
     </ul> 
    </div> 
</div> 

JS

です:

function UserController($scope, User, Group){ 
    $scope.users = User.query(); 

    $scope.createUser = function(){ 

     //$scope.users = null; 
     //$scope.users.pop(); 
     //$scope.users.push(new User({id:'5'})); 

     console.log($scope.users); 
    } 
} 

サービス:http://dpaste.com/1065440/

すべてのユーザーが検索され、正しく記載されています。問題は、レンダリングされたリストをまったく操作できないことです。私が何を押しても、ポップするか、nullに設定します。テンプレートのリストは変更されません。しかし、最後のログステートメントは変更を示し、例えば次のように表示されます。ユーザー配列がnullに設定されている場合はNULLです。

問題はどこですか?

+0

ここでcreateUser()を呼び出していますか?おそらく、コールバック関数をquery()に追加してから、コールバック内でcreateUser()を呼び出す必要があります。 –

+0

申し訳ありません、私はそのボタンを逃しました。私は私の質問を編集しました。 –

+0

あなたの投稿した新しい情報に照らして編集した私の答えをチェックしてください。 – finishingmove

答えて

5

あなたは配列にプッシュしたオブジェクトが、そうUser

function UserController($scope, User){ 

    $scope.users = User.query(); 

    $scope.createUser = function(){ 
     $scope.users.push(new User({first_name:'Bob', last_name: 'Schmitt'})); 
    } 
} 

のインスタンスで私たちの会話からnew User({})

を使用する必要があり、問題は、ルーティングにあったようです。同じ外部コントローラがng-viewにロードされていた部分に割り当てられました。 ng:controller="UserController"を削除し、createUserボタンを部分的に移動すると問題が解決しますが、実際にcreateUserメソッドをng-viewの外部から呼び出す必要がある場合は、それに関連するすべてのデータが外部コントローラにある必要があります。したがって、外側のコントローラーをそのまま保ち、空のプレースホルダーコントローラーを使用するようにルートを変更することができます。

+0

新しいユーザーの効果は何ですか?これはapi呼び出しを行いますか?私はあなたの提案を試みたが、それでも動作しません。 –

+0

これは配列にプッシュするオブジェクトをUserのインスタンスにします。これにより、$ saveなどのすべてのインスタンスメソッドを継承します。要約すると、Userビヘイビアがアタッチされます。 – finishingmove

+0

あなたのng-repeatは何も表示しませんか? @artworkadシ – finishingmove

3

createUserが呼び出されていることを確認してください。 IEのクリックや何か。

<button type="button" ng-click="createUser()">Create User</button> 

あなたのプッシュ機能は正しく見えますが、htmlのバインディングは間違っています。二重波括弧でなければなりません。

<li ng-repeat="user in users"> 
    {{user.first_name}} {{user.last_name}} 
</li> 

追加された例以前はオブジェクトの追加に使用しました。

<div ng-app="main"> 
    <div ng-controller="MyCtrl"> 
     <button ng-click="add()" >Add</button> 
     <div id="container"> 
      <div ng-repeat="test in tests>{{test.name}}</div> 
     </div> 
    </div> 
</div> 


$scope.tests = {}; 

$scope.add = function() { 
    var newTest = {name: 'Test Message'}; 

    $scope.tests.push(newTest); 
}; 
+0

私はその情報を見逃して、私はカスタムカーリーを使用し、私はそのボタンを逃した。次回は正しいでしょう。 –

+0

ああ、私は問題は表示されません。あなたのcreateUser関数内にブレークポイントを設定してヒットしたかどうかを確認してから、デバッグするためにUserオブジェクトを出力してみてください。 {{ユーザー}} –

+0

私の更新された質問を見てください。 –

関連する問題