2015-08-14 88 views
3


我的代码在jsfiddle
Angularjs动态添加和删除输入

HTML

<div ng-controller="MyCtrl"> 
    <input> 
    <button ng-click='add()'>Add</button> 
    <br/> 
    <b>Items Added Below</b> 
    <div ng-repeat='item in items'> 
    <input ng-model='item' id='item-{{$index}}' class='input-{{$index}}'/> 
    <button ng-click='del($index)'>DEL</button> 
    </div> 
</div> 

角控制器

var myApp = angular.module('myApp',[]); 
function MyCtrl($scope) { 
    $scope.items = []; 
    $scope.newitem = ''; 
    $scope.add = function(){ 
    if ($scope.items.length < 4) { 
     $scope.items.push($scope.newitem); 
    } 
    } 
    $scope.del = function(i){ 
    $scope.items.splice(i,1); 
    } 
} 

我尝试动态添加输入伍单击并删除特定却始终删除最后输入..
我想它因为它们没有区分项目数组。
我该如何解决这个问题?

+0

我略作修改小提琴表明你是不正确的。如果我将值添加到“newitem”以便我可以看到我正在删除的内容,它会正确删除我告诉它删除的项目。 http://jsfiddle.net/9j34dnpo/ –

+0

你为什么使用angular 1.0.1? – Ronnie

+0

仍然不删除特定的输入,但总是最后一个:/ @Ronnie在我的项目上我使用更新的版本:)你认为问题是angularjs的版本? – m1l05z

回答

1

你的代码工作正常,只要你想。

只是一个错误,你没有添加ng模型输入newitem。

Look JsFiddle

<div ng-app="myApp"> 
    <div ng-controller="MyCtrl"> 
    <input ng-model="newitem"> 
    <button ng-click='add()'>Add</button> 
    <br/> 
    <b>Items Added Below</b> 
    <div ng-repeat='item in items'> 
    <input ng-model='item' id='item-{{$index}}' class='input-{{$index}}'/> 
    <button ng-click='del($index)'>DEL</button> 
    </div> 
</div> 
</div> 

var myApp = angular.module('myApp',[]); 
function MyCtrl($scope) { 
    $scope.items = []; 
    $scope.newitem = ''; 
    $scope.add = function(){ 
    if ($scope.items.length < 4) { 
     $scope.items.push($scope.newitem); 
    } 
    } 
    $scope.del = function(i){ 
    $scope.items.splice(i,1); 
    } 
} 
+0

对不起,但你的代码不能正常工作:/ – m1l05z

+0

其代码我告诉它的问题.. :) 你究竟想要什么..? –

+0

删除特定的输入..在你的jsfiddle我只能添加一个输入,然后添加按钮不工作.. – m1l05z

3

有两个部分是:

  1. 你是不是绑定你的第一个输入(旁边添加)。这意味着你只是将“'添加到数组中。据我所知,angularjs通过键跟踪,而不是默认的索引。这导致我到第2部分。
  2. 您正在使用一个旧的AngularJS版本,它根据docs没有选项“{expr} track by $ index”。有关此信息,请参阅1.4.4 docs

所以我可能会使用最新的稳定的AngularJS,并确保您的第一个输入绑定到$ newitem。

+0

真的很感谢:) – m1l05z

2

看一看下面的小提琴:

fiddle ::http://jsfiddle.net/4zt4ynzL/

的问题是,你正在推动在阵列中每一次空字符串。

正如我在上面的小提琴中所展示的,每增加一次按钮,我都会推出一个新的值。

P.S. :你做的一切都是正确的:)

1

在简单的方法,你可以这样做:

HTML:

<span ng-repeat="hobby in hobbies track by $index"> 
    <div class="form-group"> 
     <input type='text' ng-model='hobbies[$index]' class="form-control pull-right"/> 
     <button ng-click = "addHobby()" ng-show="$last">+</button> 
     <button ng-click = "removeHobby($index)" ng-show="hobbies.length > 1">-</button> 
    </div> 
</span> 

角控制器:

$scope.hobbies = ['']; 

$scope.addHobby = function() { 
    $scope.hobbies.push(''); 
} 

$scope.removeHobby = function(index) { 
    if(index >= 0){ 
     $scope.hobbies.splice(index, 1); 
    } 
}