【问题标题】:im trying to do password strength in angular我试图在角度做密码强度
【发布时间】:2021-09-07 15:07:14
【问题描述】:

我正在尝试以大写、小写的角度设置密码强度 我得到的控制台中的大小写、数字和特殊字符 错误为。

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!;
    }
}


【问题讨论】:

  • 你能把密码强度.ts文件的全部内容贴出来吗?
  • 请立即查看。首先我写了,返回 null 它说错误,因为类型“null”不能分配给类型“ValidationResult”。所以我把它改成返回null!现在我在控制台中遇到错误
  • 如果您有用于检查密码强度的代码,请分享其他代码,即使这会有所帮助
  • 您需要在 AppModule.ts 或组件模块中为提供程序添加密码强度

标签: html angular typescript angular-reactive-forms


【解决方案1】:

最简单的解决方案是为您的服务类使用 @Injectable() 装饰器。

@Injectable({
    providedIn: 'root'
})
export class passwordstrength {
    // class definition
}

另一个选项是在模块的 providers 数组中指定它。

@NgModule({
  imports: [
  ],
  declarations: [ ],
  providers: [passwordstrength],
  bootstrap: [ ... ]
})

来自Angular Style Guide的其他cmets:

请使用破折号分隔描述性名称中的单词。 请使用常规类型名称,包括 .service、.component、.pipe、.module 和 .directive。

所以,你的“passwordstrength.ts”可以改成“password-strength.service.ts”

同样,“class passwordstrength”可以改为“class PasswordStrengthService”

【讨论】:

  • 实际上这里的输入错误我没有在文件中给出任何空格
  • @bhargavkumar 好的,如果上述解决方案解决了您的问题,您可以将其标记为已接受吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多