2013-05-16 15 views
7

Quando si inserisce un elemento in un array, la vista non aggiornerà l'elenco.Angolare: spingere la voce nell'elenco non aggiorna la vista

tavolo:

<tbody id="productRows"> 
    <tr data-ng-repeat="product in products | filter: search"> 
     <td>{{ product.Code}}</td> 
     <td colspan="8">{{ product.Name}}</td> 
    </tr> 
</tbody> 

forma:

<form data-ng-submit="submitProduct()"> 
    Code: 
    <br /> 
    <input type="text" required data-ng-model="product.Code"/> 
    <br /> 
    <br /> 
    Naam: 
    <br /> 
    <input type="text" required data-ng-model="product.Name"/> 
    <br /> 
    <input type="submit" value="Opslaan" /> 
</form> 

submitProduct controller:

$scope.submitProduct = function() { 
    console.log('before: ' + $scope.products.length); 

    $scope.products.push({Code: $scope.product.Code, Name: $scope.product.Name}); 
    console.log('after:' + $scope.products.length); 
    console.log($scope.products); 

    $scope.showOverlay = false; 
}; 

Come potete vedere, annoto le voci totali nella matrice e si comporta come Mi aspetterei. L'unica cosa che non fa quello che mi aspetto è il contenuto della mia tabella, che non mostra il nuovo valore.

Cosa devo fare, quindi la nuova riga viene visualizzata nella tabella?

+0

Sembra che dovrebbe funzionare. Aggiungi un jsfiddle o plnkr per favore. –

+1

Questo [plnkr] (http://plnkr.co/edit/UXvtEhNbiilRn6DjX93P?p=preview) con il tuo codice funziona correttamente? Stai definendo $ scope.products correttamente? –

+0

Che codice sta chiamando 'submitProduct()'? Se questo codice è in esecuzione "fuori" Angular, dovrai chiamare '$ scope. $ Apply()' alla fine del tuo metodo 'submitProduct()' per far sì che Angular esegua un ciclo di digest, che causerà la tua visualizzazione aggiornare. –

risposta

5

Grazie per la risposta e i commenti. Il problema era in un altro posto. Nel mio routeProvider avevo dichiarato un controller. Ho anche avuto una direttiva ng-controller nel mio div. Quindi il mio controller viene eseguito due volte. Quando ho rimosso la direttiva ng-controller, tutto stava funzionando come dovrebbe essere :)

+0

Grazie! , ha anche risolto il mio problema, ho dichiarato un controller nel routeProvider mentre il mio corpo aveva già un attributo ng-controller. Come sapevi che era questo il problema? –

+0

@DanielFlores Bene, guardo il mio codice dall'inizio fino alla fine. Così ho iniziato con ap..module, app.routes, fino alla mia vista. E quando guardo il mio punto di vista ho notato che avevo dichiarato lo stesso controller due volte: nel mio percorso e nella mia vista. – Martijn

+0

buona mostra, grazie – jcc

5

Non riesco a vedere il resto del codice, ma assicurati che $scope.products sia definito nel controller.

Vedere questo example.

L'unica aggiunta che ho fatto per il codice che hai fornito era:

$scope.products = []; 

Se questo non aiuta, allora si prega di fornire maggiori informazioni.

+0

La tua soluzione ha funzionato per me. Ho avuto lo stesso problema, in cui gli articoli non venivano inviati al mio $ scope.lists.push ({}) ;. Ho dichiarato $ scope.lists = []; in cima e ha funzionato come un fascino. Grazie. –

Problemi correlati