javascript - AngularJS - Shared service object being deleted incorrectly -
when trigger deletequestion() second time 2 questions deleted. idea? let me know if need see more of code.
controller.js
crtpromoctrl.controller('surveyctrl', ['$scope', 'surveysrv', function($scope, surveysrv) { $scope.questions = surveysrv.getquestions(); $scope.editquestion = function(index) { surveysrv.seteditquestion(index); }; $scope.deletequestion = function(index) { $(document).off('click', '#confirmationmodal #confirm'); $('#confirmationmodal').modal('show'); $(document).on('click', '#confirmationmodal #confirm', function() { surveysrv.deletequestion(index); $scope.$apply(); }); }; }]); service.js
crtpromosrv.service('surveysrv', function() { var questions = []; var editquestion; this.getquestions = function() { return questions; }; this.addquestion = function(question) { questions.push(question); }; this.seteditquestion = function(index) { editquestion = questions[index]; }; this.geteditquestion = function() { return editquestion; }; this.cleareditquestion = function() { editquestion = undefined; }; this.deletequestion = function(index) { questions.splice(index, 1); console.log(questions); }; }); edit: i'm thinking it's event propagation thing, since when have 5 q's deletes #2 , #3 when delete #2.
edit: fixed, see controller.js code.
it appears adding 'click' function #confirmationmodal #confirm button multiple times. first time $scope.deletequestion called, adds function. second time call it, adds again when clicked, function called twice.
a simple fix unbind 'click' event before adding again. this: $('#confirmationmodal #confirm').off('click');
the better solution here not use jquery @ these event bindings. using simple angular modal directive (like 1 provided in angular-ui library, instance) correct way this. can have ng-click on button , never have problem.
Comments
Post a Comment