2016-02-27 3 views
2
  • скриншот прилагается.

Я изучаю угловойJS. И я не могу найти способ удалить выбранный элемент, на который нажала кнопка «Удалить».Как получить определенный элемент, который выбран?

Есть ли способ сделать это?

код прилагается:

 <ul class="unstyled"> 
      <li ng-repeat="todo in todos"> 
       <input type="checkbox" ng-model="todo.done"> 
       <span class="done-{{todo.done}}">{{todo.text}}</span> 
       <button class="btn" ng-click="removeTodo()">Remove</button> 
      </li> 
     </ul> 

enter image description here

+0

Как о прохождении пункта Todo в ваш removeTodo) 'метода' (, то в этом методе (я предполагаю, что в связанный контроллер), удалите этот элемент из своего списка. – jpmcc

+0

ok .. как это сделать? :(я только начинаю учиться .. не могу найти способ) – Yanshof

+0

Итак, в 'ng-repeat' у вас есть объект todo, поэтому в вашем' ng-click' вы можете иметь 'removeTodo (todo)' , Затем в вашем методе 'removeTodo' вы имеете выбранный объект' todo' и, возможно, найдете индекс элемента в вашем массиве объектов, 'todos' и сплайсируйте его. Этот бит - это просто стандартный JavaScript, а не что-то конкретное. Угловое – jpmcc

ответ

3

var app = angular.module("app" , []); 
 
app.controller("MyCtrl" , function($scope){ 
 
    
 
    $scope.todos = [ 
 
    {"text" :"Learn AngularJS","done":false},{"text" :"build an app","done":false}]; 
 
    
 
    $scope.removeTodo = function(index) { 
 
    $scope.todos.splice(index,1); 
 
    
 
    } 
 
    
 
    $scope.removeTodo2 = function(todo) { 
 
    var index = getByValue($scope.todos,todo); 
 
    $scope.todos.splice(index,1); 
 
    
 
    } 
 
    
 
    $scope.addTodo = function(todo){ 
 
    var toDoObject = {"text":todo,"done":false}; 
 
    $scope.todos.push(toDoObject); 
 
    
 
    }; 
 
    
 
    $scope.done = function(todo){ 
 
    angular.forEach($scope.todos,function(index,todo1){ 
 
     if(todo == todo1) 
 
      $scope.todos[index].done = !$scope.todos[index].done; 
 
     }) 
 
    
 
    
 
    } 
 
    
 
    function getByValue(arr, value) { 
 

 
    for (var i=0, iLen=arr.length; i<iLen; i++) { 
 

 
    if (arr[i].text == value) return i; 
 
    } 
 
} 
 
    
 
    });
.done{ 
 
    text-decoration: line-through; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="MyCtrl"> 
 
    
 
<ul class="unstyled"> 
 
      <li ng-repeat="todo in todos track by $index"> 
 
       <input type="checkbox" ng-model="todo.done" > 
 
       <span ng-class="{'done' : todo.done == true}">{{todo.text}}</span> 
 
       <button class="btn" ng-click="removeTodo($index)">Remove</button> 
 
       <button class="btn" ng-click="removeTodo2(todo.text)">Remove2</button> 
 
      </li> 
 
     </ul> 
 
    <input type="text" ng-model="todo"> 
 
    <input type="button" ng-click = "addTodo(todo)" value="Add"> 
 
    
 
    </div>

+0

@Yanshof я редактирую свой ответ. пожалуйста, если работа для u принимает его. Благодарю. –

+0

Да, я думаю, что переход в '$ index' намного лучше. – jpmcc

+1

Но не передавайте '$ index', если использовать какие-либо фильтры ... не будет правильным индексом. Безопаснее делать свою собственную индексацию – charlietfl

Смежные вопросы