Angular6 下的注册界面中的密码框隐藏密码和明文密码切换

技术:

       Angular6+bootStrap

需求:

       做一个注册界面,界面上有一个密码输入框,默认情况下,密码框输入显示给客户是看不到明文的,但实际中,有时用户都不知道自己的密码是什么了,因此,在密码框中增加一个小图标,点击小图标后,密码框中的值可以进行显示和密码形式的切换。

思路:

      点击小图标后,小图标切换,密码输入框的type值在text和password之间进行切换

涉及知识点:

       Angular6对dom的操作,尤其是对dom元素的属性的变更操作。

code:

1、前段界面:

   注册页面,主要是一个form,且在小图标处定义一个click事件:onClickKye

<form  *ngIf="user" [formGroup]="userForm" (ngSubmit)="onSubmit();" class="form-horizontal" #registerForm>
      <div class="box-body " style="padding-bottom: 5px;">
    
    
      <div  formGroupName="passwordGroup" style="border:none;">
      <div class="form-group has-feedback col-lg-12 col-md-12" style="padding-right: 0px;">
        <label class="control-label col-lg-3 editForm-label">密码:</label>
        <div class="col-lg-9 editForm-data">
        <input type="password" class="form-control" id="password" formControlName="password" required placeholder="输入密码">
        <span id="pwdSpan" class="glyphicon glyphicon-eye-close form-control-feedback" (click)="onClickEye()"  style="display:inline-block;pointer-events: auto"></span>
        
        </div>
      </div>

      </div>
     

      <div class="row">
        <!-- /.col -->
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
          <button type="submit"  class="btn btn-primary btn-block btn-flat">注册</button>
      
      </div>
      </div>
    </form>

 2、控制类代码 核心代码是定义小图标的点击事件:

import {Component, ElementRef, Input, OnInit, Renderer2, ViewChild} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {Router} from '@angular/router';
import {UserInfo} from '../../customer/sysuser/userInfo';



@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit {
  @ViewChild('registerForm')
  registerForm: ElementRef;

  @Input() user: UserInfo = new UserInfo(); // 导入数据
  userForm: FormGroup; // 表单组对象
  constructor(public router: Router, private fb: FormBuilder,
              private render: Renderer2, ) {
    this.userForm = this.fb.group({
      name: [''],
      account: [''],
      passwordGroup: this.fb.group({
        password: [''],
        // confirmPsw: ['']
      }),
      phone: [''],
      phoneCode: [''],
    });
  }

  ngOnInit() {
    this.userForm.reset();
    this.setFormData();
  }


  /**
   * 设置表单数据值
   */
  setFormData() {
    if (null == this.user) {
      this.user = new UserInfo();
    }
    this.userForm.patchValue({
      id: this.user.id,
      name: this.user.name,
      password: this.user.password,
      account: this.user.account,
      phone: this.user.phone,
      registTime: this.user.registTime,
      flag: this.user.flag,
      lastTime: this.user.lastTime,
      loginCount: this.user.loginCount,
      wxId: this.user.wxId
    });
  }

  /**
   * 注册
   */
  onSubmit() {
     // 此处写自己的注册提交业务
  }

  /**
   *  注册页面密码输入框中的图标点击切换事件
   */
  onClickEye() {
    // 密码输入框内的小图标
    const pwdSpan: HTMLElement = this.registerForm.nativeElement.querySelector('#pwdSpan');
    // 密码输入框
    const pwdInput: HTMLElement = this.registerForm.nativeElement.querySelector('#password');
    // 当前图标样式
    const spanClass = pwdSpan.getAttribute('class');
    // 显示模式下的小图标样式
    const openClass = 'glyphicon-eye-open';
    // 隐藏模式下的小图标样式
    const closeClass = 'glyphicon-eye-close';
    if (spanClass.indexOf(closeClass) > 0) {
      // 隐藏模式,则需要切换到显示模式
      this.render.removeClass(pwdSpan, closeClass);
      this.render.addClass(pwdSpan, openClass);
      this.render.setAttribute(pwdInput, 'type', 'text');
    } else {
      // 显示模式,则需要切换到隐藏模式
      this.render.removeClass(pwdSpan, openClass);
      this.render.addClass(pwdSpan, closeClass);
      this.render.setAttribute(pwdInput, 'type', 'password');
    }
  }



}

 

3、用户实体类userinfo.ts

export class UserInfo {
  id: string;
  name: string;
  password: string;
  account: string;
  phone: string;
  companyName: string;
  remark: string;
  registTime: string;
  flag: number;
  lastTime: string;
  loginCount: number;
  wxId: string;

  getFullName(): string {
    return this.id + ' ' + this.name;
  }
}

 注意点:其实思路很简单,刚开始卡在Anguar6中对dom元素的操作,这里主要是使用了Renderer2这个操作类做了处理,可以详细看代码中的处理方式。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值