jpm*_*jpm 10 internet-explorer angular
我在Angular 2应用程序中使用了表单ngControl.例:
<label for="login-field-inputLogin" class="sr-only">Login</label>
<input
[(ngModel)]="login"
id="login-field-inputLogin"
class="form-control"
placeholder="Login"
ngControl="loginCtrl"
#loginCtrl="ngForm"
type="text"
required />
<div [hidden]="loginCtrl.valid || loginCtrl.pristine" class="alert alert-danger">Login is required</div>
Run Code Online (Sandbox Code Playgroud)
不幸的是,在IE 11上,当有一个占位符时,一旦该字段获得焦点,就会显示消息"需要登录".
我为AngularJS找到了解决这个问题的方法.请参阅AngularJS /如何防止IE触发自动输入验证?
如何使这个解决方案适应Angular 2?
小智 0
您可以修改此方法来解决此问题。
可能的解决方案:
<label for="login-field-inputLogin" class="sr-only">Login</label>
<input
validate-onblur <--- directive, see below
[(ngModel)]="login"
id="login-field-inputLogin"
class="form-control"
placeholder="Login"
ngControl="loginCtrl"
#loginCtrl="ngModel"
type="text"
required />
<div [hidden]="loginCtrl.valid || loginCtrl.pristine" class="alert alert-
danger">Login is required</div>
Run Code Online (Sandbox Code Playgroud)
指令代码:
@Directive({
selector: '[validate-onblur]',
host: {
'(focus)': 'onFocus($event)',
'(blur)' : 'onBlur($event)'
}
})
export class ValidateOnBlurDirective {
private hasFocus = false;
constructor(public formControl: NgControl) {
}
// mark control pristine on focus
onFocus($event) {
this.hasFocus = true;
this.formControl.control.valueChanges
.filter(() => this.hasFocus)
.subscribe(() => {
this.formControl.control.markAsPristine();
});
}
// mark control dirty on focus lost
onBlur($event) {
this.hasFocus = false;
this.formControl.control.markAsDirty();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4547 次 |
| 最近记录: |