AngularJS - 正确删除共享服务对象

时间:2015-04-22 18:26:46

标签: javascript angularjs twitter-bootstrap service controller

当我第二次触发deleteQuestion() 2 questions被删除时。任何的想法?如果您需要查看更多我的代码,请告诉我。

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);
    };
});

编辑:我认为这是一个事件传播的事情,因为当我有5个q时它会删除#2和#3,当我删除#2时。

编辑:已修复,请参阅controller.js代码。

1 个答案:

答案 0 :(得分:1)

您似乎多次向'click'按钮添加#confirmationModal #confirm功能。第一次调用$scope.deleteQuestion时,它会添加函数。第二次调用它时,它会再次添加 ,所以当单击它时,该函数会被调用两次。

一个简单的解决方法是在再次添加之前取消绑定'click'事件。这样的事情:$('#confirmationModal #confirm').off('click');

这里的更好解决方案是根本不使用jQuery来进行这些事件绑定。使用简单的Angular模态指令(例如Angular-UI库中提供的指令)将是执行此操作的正确方法。然后你可以在按钮上放一个ng-click,从来没有遇到过这个问题。