directive
中动态创建的表单,这些表单将它们组合在一起。 包含多个表单,这些表单都是单独提交的
app.directive('multiFormWrapper', function() {
return {
templateUrl: 'templates/directives/multiform-wrapper.html',
restrict: 'A',
scope: {
pageId: '@',
attributeName: '@',
multivaluedAttribute: '=',
callbacks: '='
}
};
});
仅限重要部分,请查看name
和ng-submit
<div class="row" ng-repeat="group in multivaluedAttribute">
<form
name="{{attributeName}}EditForm{{group.index}}"
novalidate
id="{{pageId}}-form{{attributeName}}Edit{{group.index}}"
ng-submit="callbacks.updateMultivalued(attributeName, value)">
<div class="row" ng-repeat="field in group.fields">
<div input-field-directive input-field="field"></div>
</div>
</form>
为了实现验证消息显示在表单上,我希望仅在form.$valid
时发送数据:
ng-submit="{{attributeName}}EditForm{{group.index}}.$valid &&
callbacks.updateMultivalued(attributeName, value)">
但是表单的名称是在表达式中创建的。
FormController
的句柄并覆盖submit
吗?如果有办法在没有创建额外指令的情况下执行此操作会很棒,但link
或compile
multiFormWrapper
答案 0 :(得分:0)
我的方法似乎错了,在code.realcrowd.com博文中,作者正在使用一种方法将ng-submit
替换为自定义指令,如果表单为{submit
,则取消invalid
{1}}
app.directive('rcSubmit', ['$parse', function($parse) {
return {
restrict: 'A',
require: 'form',
link: function (scope, formElement, attributes, formController) {
var fn = $parse(attributes.rcSubmit);
formElement.bind('submit', function (event) {
// if form is not valid cancel it.
if (!formController.$valid) return false;
scope.$apply(function() {
fn(scope, {$event:event});
});
});
}
};
}]);