Вступление
В большинстве приложений при регистрации имеется поле для ввода действительного пароля, которое должно содержать как минимум число и один специальный символ. В этой статье мы узнаем, как создать панель надежности пароля, в которой будет подробно описана надежность пароля.
необходимое условие
- Базовые знания по Angular.
- Код Visual Studio должен быть установлен.
- Угловой CLI должен быть установлен.
- Узел должен быть установлен.
Шаг 1
Давайте создадим новый проект Angular, используя следующую команду npm.
Оболочка
xxxxxxxxxx
1
ng new passwordStrengthBar
Шаг 2
Теперь давайте создадим новый компонент с помощью следующей команды.
Оболочка
xxxxxxxxxx
1
ng g c password-strength-bar
Шаг 3
Теперь откройте файл password-strong-bar.component.html и добавьте следующий код в этот файл.
HTML
xxxxxxxxxx
1
<div style="margin: 11px;" id="strength" #strength>
2
<small>{{barLabel}}</small>
3
<ul id="strengthBar">
4
<li class="point" [style.background-color]="bar0"></li><li class="point" [style.background-color]="bar1"></li><li class="point" [style.background-color]="bar2"></li><li class="point" [style.background-color]="bar3"></li><li class="point" [style.background-color]="bar4"></li>
5
</ul>
6
</div>
Шаг 4
Теперь откройте файл password -rength-bar.component.ts и добавьте следующий код в этот файл.
Машинопись
xxxxxxxxxx
1
import {Component, OnChanges, Input, SimpleChange} from '@angular/core';
2
3
@Component({
4
selector: 'app-passoword-strength-bar',
5
templateUrl: './passoword-strength-bar.component.html',
6
styleUrls: ['./passoword-strength-bar.component.css']
7
})
8
export class PassowordStrengthBarComponent implements OnChanges {
9
10
@Input() passwordToCheck: string;
11
@Input() barLabel: string;
12
bar0: string;
13
bar1: string;
14
bar2: string;
15
bar3: string;
16
bar4: string;
17
18
private colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];
19
20
private static measureStrength(pass: string) {
21
let score = 0;
22
// award every unique letter until 5 repetitions
23
let letters = {};
24
for (let i = 0; i< pass.length; i++) {
25
letters[pass[i]] = (letters[pass[i]] || 0) + 1;
26
score += 5.0 / letters[pass[i]];
27
}
28
// bonus points for mixing it up
29
let variations = {
30
digits: /\d/.test(pass),
31
lower: /[a-z]/.test(pass),
32
upper: /[A-Z]/.test(pass),
33
nonWords: /\W/.test(pass),
34
};
35
36
let variationCount = 0;
37
for (let check in variations) {
38
variationCount += (variations[check]) ? 1 : 0;
39
}
40
score += (variationCount - 1) * 10;
41
return Math.trunc(score);
42
}
43
44
private getColor(score: number) {
45
let idx = 0;
46
if (score > 90) {
47
idx = 4;
48
} else if (score > 70) {
49
idx = 3;
50
} else if (score >= 40) {
51
idx = 2;
52
} else if (score >= 20) {
53
idx = 1;
54
}
55
return {
56
idx: idx + 1,
57
col: this.colors[idx]
58
};
59
}
60
61
ngOnChanges(changes: {[propName: string]: SimpleChange}): void {
62
var password = changes['passwordToCheck'].currentValue;
63
this.setBarColors(5, '#DDD');
64
if (password) {
65
let c = this.getColor(PassowordStrengthBarComponent.measureStrength(password));
66
this.setBarColors(c.idx, c.col);
67
}
68
}
69
private setBarColors(count, col) {
70
for (let _n = 0; _n < count; _n++) {
71
this['bar' + _n] = col;
72
}
73
}
74
75
}
Шаг 5
Теперь откройте файл password -rength-bar.component.css и добавьте следующий код в этот файл.
CSS
xxxxxxxxxx
1
ul#strengthBar {
2
display:inline;
3
list-style:none;
4
margin:0;
5
margin-left:15px;
6
padding:0;
7
vertical-align:2px;
8
}
9
.point:last {
10
margin:0 !important;
11
}
12
.point {
13
background:#DDD;
14
border-radius:2px;
15
display:inline-block;
16
height:5px;
17
margin-right:1px;
18
width:20px;
19
}
Шаг 6
Теперь откройте файл app.component.html и добавьте следующий код.
HTML
xxxxxxxxxx
1
<h3>Password Strength Bar</h3>
2
<div class="container">
3
<div class="row">
4
<div class="col-md-8 col-md-offset-2">
5
6
<div class="panel panel-default">
7
<div class="panel-body">
8
<form class="form-horizontal" method="" action="">
9
10
<div class="form-group">
11
<label class="col-md-4 control-label">Email</label>
12
<div class="col-md-6">
13
<input type="email" class="form-control" name="email" value="">
14
</div>
15
</div>
16
<div class="form-group">
17
<label class="col-md-4 control-label">Password</label>
18
<div class="col-md-6">
19
<input type="password" class="form-control"
20
id="password" name="password" placeholder="Enter password"
21
[(ngModel)]="account.password" #password="ngModel" minlength="5" maxlength="50"
22
required>
23
24
<app-passoword-strength-bar [passwordToCheck]="account.password" [barLabel]="barLabel">
25
</app-passoword-strength-bar>
26
</div>
27
</div>
28
</form>
29
</div>
30
</div>
31
</div>
32
</div>
33
</div>
Шаг 7
Теперь откройте файл app.component.ts и добавьте следующий код в этот файл.
Машинопись
xxxxxxxxxx
1
import { Component, OnInit } from '@angular/core';
2
3
@Component({
4
selector: 'app-root',
5
templateUrl: './app.component.html',
6
styleUrls: ['./app.component.css']
7
})
8
export class AppComponent implements OnInit {
9
public account = {
10
password: null
11
};
12
public barLabel: string = "Password strength:";
13
14
constructor() { }
15
16
ngOnInit() {
17
18
}
19
}
Шаг 8
Теперь откройте файл app.module.ts и добавьте следующий код в этот файл.
Машинопись
xxxxxxxxxx
1
import { BrowserModule } from '@angular/platform-browser';
2
import { NgModule } from '@angular/core';
3
import { FormsModule } from '@angular/forms';
4
import { AppComponent } from './app.component';
5
import { PassowordStrengthBarComponent } from './passoword-strength-bar/passoword-strength-bar.component';
6
7
@NgModule({
8
declarations: [
9
AppComponent,
10
PassowordStrengthBarComponent
11
],
12
imports: [
13
BrowserModule,
14
FormsModule,
15
],
16
providers: [],
17
bootstrap: [AppComponent]
18
})
19
export class AppModule { }
Шаг 9
Теперь давайте запустим проект с помощью команды npm start
или ng serve
и проверим вывод:
Резюме
Из этой статьи мы узнали, как создать панель надежности пароля в приложениях Angular 8.
Пожалуйста, дайте ваши ценные отзывы / комментарии / вопросы по этой статье. Пожалуйста, дайте мне знать, если вам понравилась и поняла эту статью, и как я могу улучшить ее.