angularjs - Angular ng-repeat not updating after splice -


i working on angular material site , using ng-repeat populate table. list generated ng-repeat contains list of users (the users array populated restful query).

each "item-content" of ng-repeat has "delete" button delete/splice item/user out of array.

if have no filters applied ng-repeat statement...when splice index of selected user out of array....the ui/dom updated , user removed list.

if apply filter (filters first letter of last name , shows results)...when splice index out of array...the ui/dom not updated , user remains in list (from can tell walking through delete function console...the array updated , index/user removed).

i filter being used custom angular filter , takes 1 input (the starting letter of last name want filter on).

app.filter('startswith', function () { return function (items, lettermatch) {     var re = new regexp("^[" + lettermatch.touppercase() + lettermatch.tolowercase() + "]$");     var filtered = [];     (var = 0; < items.length; i++) {       var item = items[i];       var lastnameletter = item.user.name.substr(item.user.name.indexof(' ') + 1, 1);        if (re.test(lastnameletter)) {         filtered.push(item);       }     }     return filtered; }; }); 

here ng-repeat statement:

 <md-item ng-repeat="user in ddusers | startswith:selectedfilter | startfrom:currentpage*pagesize | limitto:pagesize"> 

in controller...i using dialog prompt (part of angular material 1.1 rc framework) initiate/confirm delete , proceed splice.

$scope.showprompt = function(ev,index,user) { // appending dialog document.body cover sidenav in docs app var confirm = $mddialog.prompt()       .title('delete user?')       .textcontent('type in delete confirm deletion of user.')       .placeholder('delete')       .arialabel('delete user')       .targetevent(ev)       .ok('delete')       .cancel('cancel');  $mddialog.show(confirm).then(function(result) {   if(result=="delete")   {     $scope.ddusers.splice(index, 1);     $scope.showsimpletoast('successfully deleted ' + user.user.name);   }   else   {     $scope.showsimpletoast('did not confirm properly');   }       }, function() {   $scope.showsimpletoast('cancelled deletion ' + user.user.name);   //var message = $scope.filterlastname(user.user.name);   //$scope.showsimpletoast(message); });}; 

when controller loads...i have init function executes , populates ddusers custom angular factory:

var init = function () { $scope.ddusers = $userlist.userlist; } init(); 

i not sure why ng-repeat not updating after splice when filter applied. if have no filter on ng-repeat, ng-repeat update ui/dom reflect change , don't see user anymore.

while not shown how call function assume passing in $index view.

the problem doing $index not same index filtered array original array splicing wrong element out of main data array

you need own indexing passing in actual object.

i assume user object do:

 if(result=="delete")   {     var idx = $scope.ddusers.indexof(user);     if(idx > -1 ){// make sure can index object        $scope.ddusers.splice(idx, 1);        $scope.showsimpletoast('successfully deleted ' + user.user.name);     else{       // ooops ... can't find      }   } 

Comments