每ng-click如何绑定提交一次?

时间:2016-05-04 11:11:39

标签: javascript jquery angularjs

我正在开发一个angular-node.js应用程序作为jira的云插件,我有一个按钮,当点击时会触发一个帖子请求。我面临一个奇怪的问题,即这个帖子请求被称为按钮被点击的次数。例如,如果我第一次单击按钮 - 发布请求被调用一次,如果我再次单击,这是第二次发布请求执行两次,依此类推。刷新页面后,它再次从零开始。这是代码:

控制器代码:

$scope.addActor = function(){
    AP.require('dialog', function(dialog){
        dialog.create({
            key: 'actor-content',
            width: '40%',
            height: '30%',
            chrome: true,
        });
    });

    AP.require('events', function(events){
        events.on('customEvent', function(){
            console.log(arguments[0]);
            var data = {
                productName: $scope.productName,
                checked: false,
                actor: arguments[0]
            };

            $http.post('/addActor', data)
                .success(function(data){
                    $scope.actors = [];

                    for (var actor in data){

                        console.log(data[actor].checked)
                        console.log(data[actor].actor)

                        $scope.actors.push({
                            checked : data[actor].checked,
                            id : data[actor].actor
                        });
                    }

                    AP.require("messages", function(messages){
                        //create a message
                        var message = messages.success('','Actor added');
                        setTimeout(function(){
                            messages.clear(message);
                        }, 2000);
                    });


                    /*$scope.formData = {};*/

                }).error(function(data){
                    AP.require("messages", function(messages){
                        //create a message
                        var message = messages.error('','Error in Adding Actor');
                        setTimeout(function(){
                            messages.clear(message);
                        }, 2000);
                    });
                });
        });
    });

};

dialogActor.hbs

<body style="background:white">

        <div class="aui-dialog2-content">
            <script>


                $(document).one('click', function(e) {
                    // initialization here

                    AP.require('dialog', function(dialog) {
                        dialog.getButton('submit').bind(function() {

                            AP.require('events', function(events){
                                var actor = $('#actor').val();
                                events.emit('customEvent', actor);
                            });

                            dialog.close();
                        });
                        dialog.getButton('cancel').bind(function () {
                            dialog.close();
                        });
                    });
                });

            </script>

            <form class="aui" action="#" name="jiraform" id="actorform">


                <div class="content">
                    <div class="field-group">

                        <label for="summary">Actor<span class="aui-icon icon-required">Required</span></label>
                        <input type="text" value="" name="actor" id="actor" class="text long-field" data-aui-validation-field data-aui-validation-required="required" required>
                        <span class="actorError" style="color: #880000"></span>

                    </div>

                </div>
            </form>

        </div>

</body>

1 个答案:

答案 0 :(得分:0)

改变
AP.require('events', function(events){
        events.on('customEvent', function(){
    })
})


AP.require('events', function(events){
            events.once('customEvent', function(){
        })
    })

解决了这个问题。这可以确保事件发生一次。