Javascript 将验证消息转换为指令-AngularJS
我正在尝试使用指令在AngularJS中创建一个小的可重用组件。 我取得了很好的进展,但我在验证方面有问题。例如,所需的验证不起作用。我认为这是“有约束力”的问题 我的HTML代码:也在 My element.html代码:Javascript 将验证消息转换为指令-AngularJS,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在尝试使用指令在AngularJS中创建一个小的可重用组件。 我取得了很好的进展,但我在验证方面有问题。例如,所需的验证不起作用。我认为这是“有约束力”的问题 我的HTML代码:也在 My element.html代码: <td id="lbl_paymentReference" class="formInputLabelWrapper">{{labelname}}</td> <td class="formInputTextWrapper"> &
<td id="lbl_paymentReference" class="formInputLabelWrapper">{{labelname}}</td>
<td class="formInputTextWrapper">
<input id="{{fieldname}}"
name="{{fieldname}}"
title="{{title}}"
class="large empty"
required>
<span data-ng-show="paymentCallForm.{{fieldname}}.$error.required"
class="error">Error</span></td>
{{labelname}
错误
我认为您需要在视图上附加一个控制器。表单对象将附加到此控制器的$scope
对象上具有表单id的属性。一旦你加上它,我想它会开始出现。好吧,我解决了这个问题,但代价太高了。其中有许多问题和相关的问题。我可能不记得所有的,所以这里是一个工作的例子
当您定义scope
参数,如scope:{labelname:'@',fieldname:'@',title:'@},
(以对象作为值),它将创建一个独立的作用域,这意味着不从父作用域继承。因此这里的ng show=“paymentCallForm.{{fieldname}}.$error.required”
无法访问表单。作为一种解决方法,ng show=“$parent.paymentCallForm.{{fieldname}}.$error.required”
,但我没有检查在隔离作用域的情况下,您的输入是否在表单中发布。或scope:true
并手动将属性注入范围
compile: function() {
return {
pre: function (scope, element, attr) {
scope.fieldname = attr.fieldname;
}
}
}
请注意使用prelink函数,以便在链接子项之前调用它
下一步ng show
将实际使用not插值表达式,并且表单中显然没有名为{{fieldname}}
的属性。这在Angular的后续版本中得到了修复,不知道确切的时间,因为我使用的是master
但不固定的是ngModelController
。它很早就得到了它的名字,所以在错误的表单下发布了它自己。我必须自己解决这个问题,很好,只有一行可以解决这个问题,在文件src/ng/directive/input.js
中
// add
modelCtrl.$name = attr.name;
// before this
formCtrl.$addControl(modelCtrl);
你的谢克坦,是个打字错误。在jsfiddle中是正确的。Yaroslav,为了在element.html中使用angular 1.1.1,我使用了ErrorThat,因为input和span使用相同的字段名,即
{{fieldname}
,而不是primaryAccountNumber
。如果在表中添加第二行,您会看到它的输入被忽略,并且第一个输入控制两个跨度。
compile: function() {
return {
pre: function (scope, element, attr) {
scope.fieldname = attr.fieldname;
}
}
}
// add
modelCtrl.$name = attr.name;
// before this
formCtrl.$addControl(modelCtrl);