我们有以下表格
<form name="createForm" class="form-horizontal overlayContainer" enctype="multipart/form-data" ng-submit="submitResourceForm()">
... [ removed for brevity ]
<div class="form-group">
<label for="file" class="col-md-2 control-label">Select file</label>
<div class="col-md-10">
<label class="btn btn-default" ng-class="{'btn-primary': Data.File}">
Browse <input type="file" name="file" style="display: none;" em-file-model="Data.File" accept="image/*|application/octet-stream" required />
</label>
<span ng-show="Data.File">
{{Data.File.size}} bytes
</span>
<span ng-show="createForm.file.$touched && createForm.file.$invalid" class="validation">File is required.</span>
</div>
</div>
<div class="form-group">
<label for="name" class="col-md-2 control-label">Name</label>
<div class="col-md-10">
<input type="text" name="name" class="form-control" ng-model="Data.Name" required>
<span ng-show="createForm.name.$touched && createForm.name.$invalid" class="validation">Name is required.</span>
</div>
</div>
</div>
验证正在进行提交-没有文件和名称的表单将不会提交-但问题是文件的验证消息从未显示。
好奇的观察夫妇
我在控制器中添加了一个虚拟功能以进行调试,并将其附加到ng单击OK按钮。在函数中使用(Visual Studio)断点时,我尝试检查createForm.file和createForm.name的各种验证属性-所有属性-$ valid,$ touched等-显示为未定义。
我在表单上放置了一些标记,以显示createForm.file。$ touched,createForm.file。$ invalid,createForm.name。$ touched和createForm.name。$ invalid的值。名称属性以定义的值显示,但文件属性没有。
我尝试使用!createForm.file。$ pristine而不是createForm.file。$ touched,这没什么区别。
注意,em-file是我们自己的指令,用于将实际文件添加到模型中。我删除了它,看看它是否在这种情况下起作用,并且没有区别。