html - 我试图在角度做密码强度
问题描述
我正在尝试在控制台中使用 Angular 中的大写、小写、数字和特殊字符来做密码强度,但我遇到了错误。
NullInjectorError:没有密码强度提供者!在 passwordstrength.ts 文件中
HTML
<div class="validation_errors text-left">
<ng-container *ngFor="let validation of validationmessages.password">
<div class="error-message"
*ngIf="loginform.get('password')?.hasError(validation.type) && (loginform.get('password')?.dirty || loginform.get('password')?.touched)">
<span> {{ validation.message }}</span>
<p class="help is-danger"
*ngIf="loginform.get('password')?.hasError('strong')">
Must have at least one number, one lowercase and one uppercase letter.</p>
</div>
</ng-container>
</div>
ts
this.loginform = this.formbuilder.group({
username: ['', Validators.required],
password: ['', passwordstrength.strong]
});
}
密码强度.ts
import { FormControl } from '@angular/forms';
export interface ValidationResult {
[key: string]: boolean;
}
export class passwordstrength {
public static strong(control: FormControl): ValidationResult {
let hasNumber = /\d/.test(control.value);
let hasUpper = /[A-Z]/.test(control.value);
let hasLower = /[a-z]/.test(control.value);
// console.log('Num, Upp, Low', hasNumber, hasUpper, hasLower);
const valid = hasNumber && hasUpper && hasLower;
if (!valid) {
// return what´s not valid
return { strong: true };
}
return null!;
}
}
解决方案
最简单的解决方案是为您的服务类使用 @Injectable() 装饰器。
@Injectable({
providedIn: 'root'
})
export class passwordstrength {
// class definition
}
另一个选项是在模块的 providers 数组中指定它。
@NgModule({
imports: [
],
declarations: [ ],
providers: [passwordstrength],
bootstrap: [ ... ]
})
Angular Style Guide的其他评论:
请使用破折号分隔描述性名称中的单词。请使用常规类型名称,包括 .service、.component、.pipe、.module 和 .directive。
所以,你的“passwordstrength.ts”可以改成“password-strength.service.ts”
同样,“class passwordstrength”可以更改为“class PasswordStrengthService”
推荐阅读
- bash - 从运行 shell 脚本的内部关闭终端窗口
- git - 如果我们在 Git 中将提交压缩为一个并变基,那么变基或合并真的很重要吗?
- emacs - 如何阻止 Spacemacs 覆盖剪贴板并同时启用搜索粘贴?
- python - 使用(常量)参数保存/加载 Keras 模型
- ios - iOS Autolayout UIControl 子类自动调整大小以适应 UICollectionView 子视图
- python - 用于抓取 web gui 字符串的脚本,Python 2.7 上的错误在 Python 3 上运行
- java - 给定一个字符串数组,递归计算(无循环)数组是否在某处包含字符串“milk”
- mongodb - 将 Mongo 数据库导入 Docker 容器
- android - 为什么 EasySplashScreen 图标这么小(Android Studio)?
- javascript - 在没有 Jquery 的情况下更改活动选项卡