問題我嘗試使用AngularJS實現一個簡單的功能,如下所示。在項目列表中,當用戶單擊一個項目並單擊刪除按鈕時,該項目將被刪除。<select ng-options =「...」/>
HTML:
<div ng-app="app" ng-controller="MainController">
<div>
<select ng-options="item.name for item in items" ng-model="currentItem" size="5" style="width: 200px"></select>
</div>
<button ng-click="removeItem()">Remove</button>
</div>
和腳本是象下面這樣:
angular.module('app', [])
.controller('MainController', function($scope) {
$scope.items = [{
name: 'item1'
}, {
name: 'item2'
}, {
name: 'item3'
}];
$scope.currentItem = $scope.items[0];
$scope.removeItem = function() {
var index = $scope.items.indexOf($scope.currentItem);
$scope.items.splice(index, 1);
};
});
問題是,當我試圖刪除的項目(即ITEM2),名單總表第一個位置是空的物品。當我點擊「item1」或「item3」時,空的項目消失。
我知道,這是由ng-model="currentItem"
在HTML所致。 currentItem指向要刪除的項目,currentItem指向null。所以我改變了下面的函數removeItem來解決這個問題。
$scope.removeItem = function() {
var index = $scope.items.indexOf($scope.currentItem);
$scope.items.splice(index, 1);
/* PART 1 begin */
if ($scope.items.length === 0) {
$scope.currentItem = null;
} else {
if (index >= 0 && index <= $scope.items.length - 1) {
$scope.currentItem = $scope.items[index];
} else {
$scope.currentItem = $scope.items[$scope.items.length - 1];
}
}
/* PART 1 end */
};
我想知道是否有任何AngularJS簡單的方式(如指令)來自動完成第1部分的動作。
我以前做過這個。我不知道更好的方法。 – z0r
您是否嘗試在選擇中添加ng-if?比如'' –
我試過如果它仍然是同樣的問題。 – yyou