如何在指令中检查跨封装表单的有效性?
How can I check transcluded form's validity in directive?
改写问题以澄清
如何在指令中检查跨封装表单的有效性?我想检查指令的link function
中的myForm.$valid
。我会在指令中注入不同的形式或者以不同的形式使用指令你可以输入
困难在于范围是孤立的,下面的答案对我来说都不起作用。
请在这里找到完整的代码,
https://plnkr.co/edit/K3IrE5KVehWXFM9JEMvE?p =
预览我想在表单无效时禁用"保存"按钮
要回答您的主要问题,您可以像任何其他模型值一样公开和绑定表单:
angular.module("main", [])
.directive("formDirective", formDirective);
function formDirective() {
return {
restrict: "A",
scope: {
formModel: "=formModel"
},
link: function (scope, element, attrs) {
scope.$watch("formModel.$valid", function (newValue, oldValue) {
console.log(newValue, oldValue);
});
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="main">
<div form-directive form-model="myForm">
<div>
<form name="myForm">
<div>
<input type="text" ng-model="name" required="required">
</div>
Valid: {{myForm.$valid}}
</form>
<div>
</div>
</div>
然而,从我们的聊天中可以清楚地看出,你的整体问题要复杂得多。
我在这里添加了一个工作示例:https://plnkr.co/edit/lkfdmc0PLRadfYFVhFAm?p=preview
这里需要实现的关键方面有:
- 你打开一个模态对话框与
$uibModal.open
,这将实例化引用的控制器editCtrl
和加载模板editCtrl.html
。 - 加载过程包括Angular正在编译模板。这个模板在根级包含了一个指令,所以这个指令也需要被编译。
- 该指令使用透传并加载模板
dialog.html
。这里需要注意的是,esDlg指令的作用域现在在dialog.html
的模板中是可用的,所以你可以访问指令声明的scope
中定义的所有属性。你已经在对话框的标题和文本中使用了这个。 我们所需要做的就是在这里绑定有效性信息,这样我们就可以在对话框中使用它。
angular.module("main", [])
.directive("formDirective", formDirective);
function formDirective() {
return {
restrict: "A",
scope: {
formModel: "=name"
},
link: function (scope, element, attrs) {
scope.$watch("formModel.$valid", function (newValue, oldValue) {
console.log(newValue, oldValue);
});
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="main">
<div my-directive>
<div>
<form name="myForm" form-directive>
<div>
<input type="text" ng-model="name" required="required">
</div>
Valid: {{myForm.$valid}}
</form>
<div>
</div>
</div>
我建议你使用angular-auto-validate
您是否正确定义了指令?检查这个柱塞,validity
被记录为您所期望的。
function MyDirective() {
return {
restrict: 'AE',
scope: true,
link: function (scope, element, attrs) {
scope.$watch('myForm.$valid', function (validity) {
console.log(validity);
});
}
}
}
我从你的代码中创建了一个plunk,它似乎工作得很好。请记住,只有当表单的有效状态从有效变为无效或反之亦然时,它才会生成日志。
https://plnkr.co/edit/lW3e4p <div ng-app="my-app">
<div ng-controller="testCtrl">
<div my-directive>
<form name="myForm">
<input type="number" step="0.01" ng-model="rate" required>
</form>
</div>
</div>
</div>
角:
angular.module('my-app').directive('myDirective', function() {
return {
link: function(scope, element, attr, mCtrl) {
scope.$watch('myForm.$valid', function(validity) {
console.log(validity);
})
}
};
});
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 如何从pdftron webviewer获取表单数据
- JS验证ajax返回的html中的表单数据
- Javascript更新孙窗口中的表单元素
- 解析javascript表单验证器
- 表单提交,即使它被封装在if语句中,并且不满足条件
- 如何通过封装在指令中的angularjs表单集合来访问输入元素
- 如何在指令中检查跨封装表单的有效性?