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
Post a Comment