2013-07-24 9 views
19

Please help me attuare questa funzione. Ho una serie di elementi nel mio $scope. Ora, quando clicco sul pulsante Aggiungi elemento, voglio inserire un nuovo elemento nel primo indice o nell'indice 0 di quell'array. Grazie in anticipo. :)

Ecco un lavoro jsFiddle iniziare con: http://jsfiddle.net/limeric29/7FH2e/

HTML:

<div ng-controller="Ctrl"> 
    {{data}}<br/> 
    <input type="button" ng-click="addItem()" value="Add Item" /> 
</div> 

JavaScript:

function Ctrl($scope) { 
    $scope.data = [ 
    new String('Item 5'), new String('Item 4'), new String('Item 3'), new String('Item 2'), new String('Item 1')]; 

    $scope.addItem = function() { 
     var c = $scope.data.length + 1; 
     var item = new String('Item ' + c) 
     $scope.data.push(item); 
    }; 
} 

risposta

26

Risolto il mio problema usando splice() invece di push() e assegnando a quale indice di array inserire.

HTML:

<div ng-controller="Ctrl"> 
    <pre>{{data}}</pre><br/> 
    <input type="button" ng-click="addItem()" value="Add Item" /> 
</div> 

Javascript:

function Ctrl($scope) { 
    $scope.data = [ 
    new String('Item 4'), new String('Item 3'), new String('Item 2'), new String('Item 1')]; 

    $scope.addItem = function() { 
     var c = $scope.data.length + 1; 
     var item = new String('Item ' + c) 
     $scope.data.splice(0, 0, item); 
    }; 
} 

Ecco la versione aggiornata violino per questo. http://jsfiddle.net/limeric29/xvHNe/

+15

puoi anche usare 'unshift'. è un modo comune di pre-modificare gli elementi di un array. –

23

È possibile utilizzare la funzione di non spostamento.

function Ctrl($scope) { 
$scope.data = [ 
new String('Item 5'), new String('Item 4'), new String('Item 3'), new String('Item 2'), new String('Item 1')]; 

$scope.addItem = function() { 
    var item = new String('Item ' + c) 
    $scope.data.unshift(item); 
}; 
} 
+0

Questo è l'approccio migliore e più semplice! –

0

Prova questo:

function Ctrl($scope) { 
    $scope.data = [ 
    new String('Item 4'), new String('Item 3'), new String('Item 2'), new String('Item 1')]; 

    $scope.addItem = function() { 
     var c = $scope.data.length + 1; 
     var item = new String('Item ' + c); 
     $scope.data.push(item); 
    }; 
} 
6
$scope.data.unshift(item); 

Una linea, non so perché gli altri hanno reso così difficile

0

penso, non è necessaria questa operazione. Puoi risolverlo in questo modo;

<div ng-controller="Ctrl"> 
    <!-- "$index" is short parameter, "true" statment is reverse parameter --> 
    {{data | reverse:$index:true}}<br/> 
    <input type="button" ng-click="addItem()" value="Add Item" /> 
</div> 
Problemi correlati