从Angular的文档中可以看出ngSubmit是提交表单的首选方式。所有待处理的操作都立即完成并且$submitted
标志也被设置。而收听ngClick
事件并不具有相同的效果。如何在AngularJS中以编程方式触发表单提交?
现在我需要提交一个表格,其中包含ngSumbit
方法的所有好处。因此我需要一些方法来触发标准的提交工作流程。
我试图DOM形式submit()
和它的工作,但附着范围角的形式,对象包含DOM形式的引用,因此,我需要通过jqLite访问它:
var frm = angular.element('#frmId');
frm.submit();
我不喜欢这在控制器代码访问DOM溶液所以我创建一个指令:
function wuSubmit() {
return {
require: 'form',
restrict: 'A',
link: function(scope, element, attributes) {
var scope = element.scope();
if (attributes.name && scope[attributes.name]) {
scope[attributes.name].$submit = function() {
element[0].submit();
};
}
}
};
}
延伸形式的对象与$submit
方法。
这两种变体都不能工作,原因不明。 form.submit()
尝试发送数据,不会阻止默认操作。
更新1
事实证明,角听单击其type="input"
元素的事件。
最后我决定触发点击事件为元素:
wuSubmit.$inject = ['$timeout'];
function wuSubmit($timeout) {
return {
require: 'form',
restrict: 'A',
link: function (scope, element, attributes) {
var submitElement = element.find('[type="submit"]').first();
if (attributes.name && scope[attributes.name]) {
scope[attributes.name].$submit = submit;
}
function submit() {
$timeout(function() {
submitElement.trigger('click');
});
}
}
};
}
有没有出此功能的现成的解决方案吗?
你是如何在HTML表单结合正常的表单提交? –