我似乎无法弄清楚问题是什么,我有一个这样的表单输入。
<div class="form-group">
<label class="form-label" for="password">Change Password</label>
<input type="password" class="form-control" id="password" name="password" [(ngModel)]="password" pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}">
</div>
然后在它下面我有..
<div *ngIf="!password.valid && (password.dirty || password.touched)" class="password-reminder">
<p>Your password must be over 8 characters and include an uppercase letter, a number and a special character</p>
</div>
现在,如果我没有有效的密码并且它被触摸了,则没有任何反应,但我知道验证正在起作用,因为我表单上的按钮被禁用,直到我正确输入密码。
不知道我做错了什么? 为什么div 不会显示自己??
编辑如果我拿走&& (password.dirty || password.touched)
它就可以工作,但我只想显示消息如果他们输入无效密码并取消触摸..
我可以在我的开发工具中看到正在应用这些类
但是当我的密码有效时,它不会消失。
编辑 2
我正在使用模板驱动的表单
任何帮助将不胜感激。
在输入字段上创建模板引用变量。
<input #passwordField="ngModel" type="password" class="form-control" id="password" name="password" [(ngModel)]="password" pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}">
确保使用模板中的passwordField
更新对password
的引用。
<div *ngIf="!passwordField.valid && (passwordField.dirty || passwordField.touched)" class="password-reminder">
<p>Your password must be over 8 characters and include an uppercase letter, a number and a special character</p>
</div>
由于您使用的是模板驱动的表单,因此组件中没有相应的password
属性,因此大多数使用模板引用变量。您可以在此处找到此方法的演示。
试试这个。
将此部件添加到输入字段(模板引用变量(
#passwordField="ngModel"
<div class="form-group">
<label class="form-label" for="password">Change Password</label>
<input type="password" class="form-control" id="password" name="password" [(ngModel)]="password" pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}" #passwordField="ngModel">
</div>
<div *ngIf="!passwordField.valid && (passwordField.dirty || passwordField.touched)" class="password-reminder">
<p>Your password must be over 8 characters and include an uppercase letter, a number and a special character</p>
</div>
那么它应该可以工作。在此处阅读有关模板驱动表单的更多信息。
正如其他人所说 你应该使用一个元素变量,比如#passwordElement="ngModel">
看看斯塔克闪电战
正如其他人所说,您需要在密码div中提供模板参考:
#password=ngModel
还要将required添加到您的密码标签中,如下所示:
<input type="password" class="form-control" id="password" name="password" [(ngModel)]="password" #password=ngModel pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}" required>
我刚刚测试了它,它对我有用。
创建临时引用变量。 类似的东西
<input #password=ngModel />
然后使用 #password 进行验证。还要确保您正确应用了触摸和脏类。