2013-07-24 2 views
19

Пожалуйста, помогите мне реализовать эту функцию. У меня есть набор элементов в моем $scope. Теперь, когда я нажимаю кнопку «Добавить элемент», я хочу нажать новый элемент на первый индекс или индекс 0 этого массива. Заранее спасибо. :)

Вот рабочий jsFiddle начать с: 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); 
    }; 
} 

ответ

26

Решил мою проблему, используя splice() вместо push() и назначая, какой индекс массива нужно вставить.

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

Вот обновленный скрипку для этого. http://jsfiddle.net/limeric29/xvHNe/

+15

вы также можете использовать 'unshift'. это обычный способ подготовки элементов к массиву. –

23

Вы можете использовать функцию unshift.

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

Это лучший и простой подход! –

0

Попробуйте это:

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

Одна линия, не знаю, почему другие сделали это так трудно

0

Я думаю, не стоит эта операция. Вы можете решить это так:

<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> 
Смежные вопросы