强制ngSubmit存在[action]属性

时间:2014-11-26 17:12:35

标签: javascript angularjs dom ng-submit

Angular说什么......

  

[ngSubmit]阻止默认操作(表单意味着将请求发送到服务器并重新加载当前页面),但仅限于表单不包含action,data-action或x-action属性。

所以如果您无法从HTML 中删除[action]属性,那么如何覆盖此行为以在表单提交时注入自定义代码并阻止定义的[action]被触发?< / p>

一种可能的解决方案是创建一个指令并覆盖DOM属性“onsubmit”。这里的CONS是你被迫在后端配置它时你可以使用angular属性

达到相同的目的
    app.directive("contactForm", function(){

        return {
            link: function( scp, elm, att )
            {
                elm[0].onsubmit = function( evt )
                {
                                                                                                                                                                                                                                                                                /* your custom code here */
                }
            }
        };
    });

提前致谢

2 个答案:

答案 0 :(得分:2)

如果要在编译action之前删除ng-submit,只需创建一个具有更高优先级的指令,即删除该属性。

app.directive('remove-action', function () {
    return {
        priority: 1,    // ngSubmit has priority 0
        compile: function (element) {
            element.removeAttr('action');
            return function link () {};
        }
    };
});

答案 1 :(得分:0)

所以我遇到了类似的问题,这就是我最终解决的问题。

对于angularjs 1.2,它足以将动作设置为空白

行动=&#39;&#39;

对于angularjs 1.3,你必须将动作设置为这样的

action =&#39; javascript:;&#39;

我不确定这是否是有效的HTML或最佳做法,但确实有效。