2013-04-19 11 views
6

C'è un elenco di utenti recuperati da una pausa API. Ecco il modelloangularjs ng-repeat elenco non aggiornato quando elemento aggiunto/rimosso

<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> 

Il 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); 
    } 
} 

Il servizio: http://dpaste.com/1065440/

Tutti gli utenti un recuperati e riportati in modo corretto. Il problema è che non riesco a manipolare affatto l'elenco dei rendering. Non importa cosa faccio push, pop o impostato su null. L'elenco non cambia nel modello. Tuttavia, l'ultima dichiarazione di registro mostra le modifiche, viene stampato ad es. NULL quando l'array di utenti è impostato su null.

Qualche idea in cui il problema è?

+0

Dove stai chiamando createUser()? Probabilmente dovrai aggiungere una funzione di callback a query(), quindi chiamare createUser() all'interno del callback. –

+0

Mi dispiace, ho perso quel pulsante. Ho modificato la mia domanda. –

+0

Controlla la mia risposta, l'ho modificata alla luce delle nuove informazioni che hai postato. – finishingmove

risposta

5

L'oggetto si spinge nella matrice deve essere un'istanza di User

function UserController($scope, User){ 

    $scope.users = User.query(); 

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

Quindi, utilizzare new User({})

Dalla nostra conversazione, sembra che il problema era nel routing. Lo stesso controller esterno è stato assegnato al parziale che veniva caricato nello ng-view. La rimozione die lo spostamento parziale del pulsante createUser risolverebbero il problema, ma se è davvero necessario chiamare il metodo createUser da esterno a ng-view, sarà necessario che tutti i dati ad esso associati si trovino nel controller esterno. Pertanto, puoi mantenere il controller esterno così com'è e modificare il percorso per utilizzare un controller segnaposto vuoto.

+0

Qual è l'effetto del nuovo utente? Questo fa una chiamata API? Ho provato il tuo suggerimento ma ancora non funziona. –

+0

Rende l'oggetto che inserirai nell'array un'istanza di Utente, che fa ereditare tutti i metodi di istanza come $ save ecc. In breve: allega il comportamento dell'Utente. – finishingmove

+0

E la tua ng-repeat mostra qualcosa? @artworkad シ – finishingmove

3

assicurarsi che venga chiamato createUser. IE ng-clic o qualcosa del genere.

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

La funzione di spinta sembra corretta, ma l'associazione in html sembra errata. Dovrebbe essere doppia parentesi graffa.

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

Esempio aggiunto che ho usato in precedenza sull'aggiunta dell'oggetto.

<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

Ho perso quell'informazione, uso ricci personalizzati e mi sono appena perso quel pulsante. Sarà corretto la prossima volta. –

+0

Ah, non vedo alcun problema quindi, hai impostato i punti di interruzione all'interno della funzione createUser per vedere se viene colpito, quindi prova a stampare l'oggetto Utente sullo schermo per eseguire il debug. {{utenti}} –

+0

Ok. guarda la mia domanda aggiornata –

Problemi correlati