如何从 angularjs 指令中获取对封闭表单元素的引用
How can I get a reference to the enclosing form element from within an angularjs directive?
我有以下 HTML:
<form name="my-form">
<div class="col-sm-4">
<input type="phone" name="mobileNumber" ng-model="form.mobileNumber" value="0439888999" required>
</div>
</form>
以及指令中的以下代码:
angular.module('myApp.directives')
.directive('required', function ($compile) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attr, ngModel) {
var formName = element.parents('form').attr('name');
var fieldName = element.attr('name');
}
};
});
但是当我运行我的单元测试时,我收到错误:TypeError: Object [object Object] has no method 'parents'
.
我知道这是因为与我的 AngularJS 版本 (v1.2.13) 打包的 jqLite 不支持父母方法。
我的问题是,如何在指令中实现相同的功能?我是否需要使用 jQuery,如果是,如何将其作为依赖项注入我的指令和单元测试中?
将
parents
替换为parent
应该可以;)
var formName = element.parent('form').attr('name');
jQlite 的可用方法列表:
http://docs.angularjs.org/api/ng/function/angular.element
如果您只想测试表单的有效性(需要电话),则不需要自定义指令。只需使用此代码:
<body ng-controller="MainCtrl">
<form name="xform">
<div class="col-sm-4">
<input test type="phone" name="phone" ng-model="data.phone" required>
</div>
<p ng-if="xform.$valid">Valid</p>
<p ng-if="!xform.$valid">Not valid</p>
</form>
</body>
如果仍需要访问自定义指令中的模型和窗体,则应在指令中使用 require 来访问模型和窗体控制器。这应该给你一个解决问题的方向:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.data = {};
$scope.data.phone = '031 584 658';
});
app.directive("test", function(){
return {
controller: function($scope) {
$scope.$watch('xform.$valid', function(newVal, oldVal) {
console.log('form validity has changed', newVal, oldVal);
})
},
link: function(scope,element,attrs,controllers) {
var model = controllers[0];
var form = controllers[1];
//console.log(model);
//console.log(form);
//console.log(form.$valid);
},
require: ['ngModel', '^form'],
}
})
这是一个工作弹道。
相关文章:
- Javascript更新孙窗口中的表单元素
- 阻止表单元素提交
- 使用带有.net autopostback的ryanfait.com自定义表单元素
- 使用javascript更改表单元素的ID值
- HTML5在提交并显示所需标签后显示隐藏的表单元素
- 为什么表单元素不应命名为submit
- 如何重置搜索表单中的特定表单元素
- 使用 ng-repeat访问 ng 表单元素/值
- 获取电子邮件附件的表单元素
- AJAX和php脚本后添加的表单元素未传输到$_POST
- 如何对未知表单元素进行表单验证
- 不显示为表单元素的图像输入按钮的动态创建和appendChild
- 在JavaScript中为表单元素生成键值对
- 表单元素上的jQuery focusout事件即使在单击子元素时也会被触发
- 如何在 OnKeyPress 事件后获取输入表单元素的值
- 表单元素值更改后的角度 JS 验证
- 使用 javascript 中的表单元素构建一个 xml 字符串
- 如何以角度访问表单元素的$valid
- 如果选择了多个选项,则使用 jQuery 显示隐藏的表单元素
- JSON 填充的表单元素不使用 angularJs 过滤器进行过滤