Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2017, 17:57
Интересующийся
Отправить личное сообщение для One_Two Посмотреть профиль Найти все сообщения от One_Two
 
Регистрация: 20.11.2017
Сообщений: 10

Удаление элемента из массива при нажатии на кнопку
Здравствуйте!

Прошу помощи, пытаюсь немного переделать пример "Список дел" с оф. сайта (http://angular-doc.herokuapp.com/).

Не могу понять, как сделать так, чтобы удалить элемент можно было по нажатию кнопки у каждого дела, в примере дела выбираются чекбоксами и удаляются толпой.

Исходный код:
<!doctype html>
    <html ng-app>
      <head>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
        <script src="todo.js"></script>
        <link rel="stylesheet" href="todo.css">
      </head>
      <body>
        <h2>Список дел</h2>
        <div ng-controller="TodoCtrl">
          <span>Осталось {{remaining()}} из {{todos.length}}</span>
          [ <a href="" ng-click="archive()">архив</a> ]
          <ul class="unstyled">
            <li ng-repeat="todo in todos">
              <input type="checkbox" ng-model="todo.done">
              <span class="done-{{todo.done}}">{{todo.text}}</span>
            </li>
          </ul>
          <form ng-submit="addTodo()">
            <input type="text" ng-model="todoText"  size="30"
                   placeholder="впишите новое дело">
            <input class="btn-primary" type="submit" value="добавить">
          </form>
        </div>
      </body>
    </html>


function TodoCtrl($scope) {
      $scope.todos = [
        {text:'learn angular', done:true},
        {text:'build an angular app', done:false}];
     
      $scope.addTodo = function() {
        $scope.todos.push({text:$scope.todoText, done:false});
        $scope.todoText = '';
      };
     
      $scope.remaining = function() {
        var count = 0;
        angular.forEach($scope.todos, function(todo) {
          count += todo.done ? 0 : 1;
        });
        return count;
      };
     
      $scope.archive = function() {
        var oldTodos = $scope.todos;
        $scope.todos = [];
        angular.forEach(oldTodos, function(todo) {
          if (!todo.done) $scope.todos.push(todo);
        });
      };
    }


В моем случае, я в ng-repeat подставляю <span data-role="remove" ng-click="archive()"></span> и при клике хочу удалить дело.
Написал вот так:
$scope.archive = function() {
$scope.todos.pop();
};
Но не учел что удаляет последний элемент в массиве.
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2017, 20:06
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

One_Two,
Нужно в функцию передавать дело и через filter или splice удалять из $scope.todos
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2017, 01:02
Интересующийся
Отправить личное сообщение для One_Two Посмотреть профиль Найти все сообщения от One_Two
 
Регистрация: 20.11.2017
Сообщений: 10

передаю - archive(todo), в $scope.archive приходит удаляемый объект. А как узнать его индекс?
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2017, 01:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

angular удаление по индексу
One_Two,

<!doctype html>
    <html ng-app>
      <head>
        <meta charset="utf-8">
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
        <script>function TodoCtrl($scope) {
      $scope.todos = [
        {text:'learn angular', done:true},
        {text:'build an angular app', done:false}];

      $scope.addTodo = function() {
        $scope.todos.push({text:$scope.todoText, done:false});
        $scope.todoText = '';
      };

      $scope.archive = function(indx) {
       $scope.todos.splice(indx,1);
      };
    }
</script>
<style type="text/css">
           [data-role] {
   font-weight: bold;
   cursor: pointer;

}
    </style>
      </head>
      <body>
        <h2>Список дел</h2>
        <div ng-controller="TodoCtrl">
          <span>Всего {{todos.length}}</span>

          <ul class="unstyled">
            <li ng-repeat="todo in todos">
              <span class="done-{{todo.done}}">{{todo.text}}</span>
              <span data-role="remove" ng-click="archive($index)">удалить</span>
            </li>
          </ul>

          <form ng-submit="addTodo()">
            <input type="text" ng-model="todoText"  size="30"
                   placeholder="впишите новое дело">
            <input class="btn-primary" type="submit" value="добавить">
          </form>
        </div>
      </body>
    </html>
Ответить с цитированием
  #5 (permalink)  
Старый 07.12.2017, 02:20
Интересующийся
Отправить личное сообщение для One_Two Посмотреть профиль Найти все сообщения от One_Two
 
Регистрация: 20.11.2017
Сообщений: 10

Всем очень благодарен! Теперь всё понятно)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание элемента по центру окна при клике на кнопку Notaton jQuery 0 22.04.2016 21:14
Удаление элемента массива без сдвига индексов preproger Общие вопросы Javascript 6 06.03.2015 17:50
Удаление элемента из массива saharin Общие вопросы Javascript 3 11.12.2012 15:22
удаление disabled при нажатии на элемент выпадающего списка deNSe_01 Events/DOM/Window 3 28.01.2011 10:49
вывод нужного текста в текстовом поле при нажатии на кнопку! fifo4ka Общие вопросы Javascript 7 06.05.2008 13:36