2015-04-08 3 views
0

Я создаю это приложение angularjs, его первое. Так огромная кривая обучения. Я не могу удалить элементы, так же как мой поиск не работает. Мне удалось получить сортировку столбцов и разбиение на страницы, чтобы работать.Angularjs splice in loop

У меня нет ошибок, поэтому я не уверен, почему поиск и удаление строки элементов в таблице не работает.

Я попытался с помощью этого:

 $scope.remove = function(client){ 
      for(var i = $scope.clients.length - 1; i >= 0; i--){ 
       if($scope.clients[i].name == client.name){ 
         $scope.clients.splice(i,1); 
       } 
      } 
     } 

Рабочий пример: http://plnkr.co/edit/f2ozbP4JxrRSvRGJAmQi

ОТВЕТ, РАБОЧАЯ:

Благодарности @DTing

$scope.remove = function(client){ 
     $scope.filteredItems = $scope.filteredItems.filter(function(item) { 
     return item.name !== client.name; 
     }); 
     $scope.groupToPages(); 
    } 
+0

Вы можете создать [plunker] (http://plnkr.co/edit/) с образцом? – Grundy

+0

Я собираюсь попробовать, дайте мне несколько минут, спасибо – dreamsynk

+0

Я думаю, вы должны иметь функцию удаления в вашем счете, не так ли? – Fourat

ответ

2

Это должно быть вашей удалить функции:

 $scope.remove = function(client){ 
      for(var i = $scope.pagedItems[$scope.currentPage].length - 1; i >= 0; i--){ 
       if($scope.pagedItems[$scope.currentPage][i].name == client.name){ 
        $scope.pagedItems[$scope.currentPage].splice(i,1); 
        break; 
       } 
      } 
     } 

Это должно быть вашей функции поиска (создание нота $ scope.clientsCopy):

 $scope.clientsCopy = angular.copy(data); 

     $scope.searchMatch = function (haystack, needle) { 
      if (!needle) { 
       return true; 
      } 
      return haystack.toLowerCase().indexOf(needle.toLowerCase()) !== -1; 
     }; 

     // init the filtered items 
     $scope.search = function() { 
      $scope.filteredItems = $filter('filter')($scope.clientsCopy, function (item) { 
       for(var attr in item) { 
        if ($scope.searchMatch(item.name, $scope.query)) 
         return true; 
        } 
        return false; 
       } 
      ); 
      // take care of the sorting order 
      if ($scope.sortField !== '') { 
       $scope.filteredItems = $filter('orderBy')($scope.filteredItems, $scope.sortField, $scope.reverse); 
      } 
      $scope.currentPage = 0; 
      // now group by pages 
      $scope.groupToPages(); 
     }; 

Plunker

+0

Но его не работает с разбиением на страницы, страница 2 не позволит мне удалить элементы? – dreamsynk

+0

Спасибо m8, что тоже работает. У вас есть идеи, почему мой поиск не работает? – dreamsynk

+0

@dreamsynk См. Обновление для поиска. Plunker обновляется для тестирования. –

1

Вы пытаетесь изменить свой $scope.clients который на самом деле пуст, потому что в вашем groupToPages Вы можете установить его в пустой массив и повторно заполнить или использовать.

$scope.groupToPages = function() { 
     $scope.clients = []; 

Вы можете заставить его работать, удалив элементы из массива filtersItems.

$scope.remove = function(client){ 
    $scope.filteredItems.splice($scope.filteredItems.indexOf(client),1); 
    $scope.groupToPages(); 
} 

http://plnkr.co/edit/z9NxW2FgYDlgLB20daO9?p=preview

+0

Привет, ваше решение также работает, но только не с разбиением на страницы, не работает на странице два. – dreamsynk

+0

Он работает в плункере. К сожалению, я отправил неправильную ссылку ранее. – DTing

+0

Привет, спасибо, что он работает, должен не обновляться правильно. Спасибо alot m8, любая идея, почему мой поиск не работает? Я обычно пытаюсь вычислить этот материал самостоятельно, я только на stackoverflow после 4 часов головных болей. – dreamsynk