强制 ngSubmit 在存在 [action] 属性的情况下

Forcing ngSubmit in presence of [action] attribute

本文关键字:属性 情况下 action ngSubmit 存在 强制      更新时间:2023-09-26

Angular 说什么...

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

因此,如果您无法从 HTML 中删除 [action] 属性,您将如何覆盖此行为以在表单提交时注入自定义代码并防止触发定义的 [action] ?

一种可能的解决方案是创建一个指令并覆盖 DOM 属性"onsubmit"。这里的缺点是,当您可以使用 angular 属性达到相同的要求时,您被迫在后端对其进行配置

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

提前致谢

如果要

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

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

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

对于 angularjs 1.2,将动作设置为空白就足够了

操作 =''

对于 angularjs 1.3,您必须将操作设置为如下所示的内容

action = 'JavaScript:;'

我不确定这是否是有效的 html 或最佳实践,但它确实有效。