從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表單結合正常的表單提交? –