我有一个指令,要测试设置为属性的表单验证。
restrict: 'A',
scope: true,
表单名称由元素属性提供
$scope.theFormName = elem.attr('name');
我需要进入if语句
if ($scope.theForm.$valid) {
我以前的内部每个单元测试我都有
html = angular.element("<div ha-form-validation name="name" class="ng-invalid"></div>");
$rootScope = $rootScope.$new();
element = $compile(html)($rootScope);
$rootScope.$digest(element);
scope = element.scope();
scope.name = {
name: "test",
};
我已尝试在我的测试中将表格设置为有效
var form = scope.theFormName.$setValidity("properties", true);
但是FormName正在返回未定义的
scope.theFormName.$valid = undefined
有没有办法将其设置为有效?
这里有几个问题:
-
正在编译的元素(
html
)中没有可设置为有效的form
元素。 -
在编译
html
之前,您应该尝试向$scope
添加属性,如下所示:var scope = $rootScope.$new(); scope.name = { name: "test" }; element = $compile(html)(scope); scope.$digest();
-
我不确定你的指令到底是什么样子的,但如果你试图访问包含它的
form
,那么你可以使用:require: '^form', link: function(scope, element, attrs, formCtrl)
父窗体上的角度
FormController
将作为第四个参数(formCtrl
)注入link
,而不必将窗体的名称作为元素上的属性传入。
此外,如果您正在尝试使用ha-form-validation
进行某种自定义验证,这可能会有所帮助。