我目前对所有的ng-messages使用这样的标记
def calc
f1 = File.open("./file1.txt", File::RDWR)
f2 = File.open("./file2.txt", File::RDWR)
f1.flock(File::LOCK_EX)
f2.flock(File::LOCK_EX)
f1.each.zip(f2.each).each do |line, line2|
bg = line.split(";").compact.collect(&:strip)
bd = line2.split(";").compact.collect(&:strip)
n = bd[2].to_i - bg[25].to_i
f2.print bd[2] << n
#puts "#{n}" Only for testing
end
f1.flock(File::LOCK_UN)
f2.flock(File::LOCK_UN)
f1.close && f2.close
end
虽然它有点乱,我想以某种方式覆盖或扩展ng-messages,以便它自动检查字段是否脏或字段嵌套在里面的形式(通过走DOM可能? )是$提交。
我希望这是我网站中所有ng-messages的默认行为,并且当我需要在未使用输入且表单没有时显示错误消息时,无法预测这种情况。已提交,所以我认为覆盖这种行为是安全的,我只是不知道该怎么做。
我知道我可以完全替换ng-messages,但是我必须重新创建该指令的所有默认行为,这些行为可能会在未来的角度版本中发生变化,所以我宁愿在可能的情况下扩展它。我不知道Angular是否为此提供了任何钩子(我已经模糊地听说过装饰器方法?)或者是否要制作一个兄弟指令,比如“ng-custom-messages”,如果条件不是那么只会隐藏元素见过吗?
所以,我有几个想法,但我需要一点点推动来展示如何实现它们,只需要一些骨架代码,如果有人感到慈善?
答案 0 :(得分:0)
遗憾的是,写了一个新的表单指令,当提交发生时,automaticalley将所有字段设置为脏。
这是一段简短的代码片段......
angular.forEach( formCtrl , function ( formElement , fieldName ) {
if ( fieldName[0] === '$' ){
return;
}
formElement.$setDirty();
}, this);
formCtrl.$setDirty();
scope.$apply();
答案 1 :(得分:0)
我建议在使用ngIf
的元素上使用ngMessages
。请注意,ngMessages
接受$error
(或NgModelController
)的FormController
属性。
<div ng-if="myForm.fieldName.$invalid && (myForm.fieldName.$dirty || myForm.$submitted)"
ng-messages="myForm.fieldName.$error">
<div ng-message="required">This field is required</div>
<div ng-message="minlength">Your field is too short</div>
</div>
顺便说一句,您可能会发现使用$touched
代替$dirty
更合适,以便推迟错误反馈,直到元素失去焦点(或表单)已提交)。