Skip to content

Use the password cell type to mask confidential values by rendering entered characters as symbols.

Overview

The password cell type behaves like a text cell, the only difference being that it masks its value using asterisks in the cell renderer. An <input type="password"> field is used for the cell editor. Data is stored in the data source as plain text.

TypeScript
/* file: app.component.ts */
import { Component } from '@angular/core';
import { GridSettings } from '@handsontable/angular-wrapper';
@Component({
selector: 'example1-password-cell-type',
standalone: false,
template: ` <div>
<hot-table [data]="data" [settings]="gridSettings"></hot-table>
</div>`,
})
export class Example1PasswordCellTypeComponent {
readonly data = [
{
id: 1,
name: { first: 'Chris', last: 'Right' },
password: 'plainTextPassword',
},
{ id: 2, name: { first: 'John', last: 'Honest' }, password: 'txt' },
{ id: 3, name: { first: 'Greg', last: 'Well' }, password: 'longer' },
];
readonly gridSettings: GridSettings = {
colHeaders: ['ID', 'First name', 'Last name', 'Password'],
height: 'auto',
autoWrapRow: true,
autoWrapCol: true,
columns: [
{ data: 'id' },
{ data: 'name.first' },
{ data: 'name.last' },
{ data: 'password', type: 'password' },
]
};
}
/* end-file */
/* file: app.module.ts */
import { NgModule, ApplicationConfig } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { registerAllModules } from 'handsontable/registry';
import { HOT_GLOBAL_CONFIG, HotGlobalConfig, HotTableModule } from '@handsontable/angular-wrapper';
import { CommonModule } from '@angular/common';
import { NON_COMMERCIAL_LICENSE } from '@handsontable/angular-wrapper';
/* start:skip-in-compilation */
import { Example1PasswordCellTypeComponent } from './app.component';
/* end:skip-in-compilation */
// register Handsontable's modules
registerAllModules();
export const appConfig: ApplicationConfig = {
providers: [
{
provide: HOT_GLOBAL_CONFIG,
useValue: {
license: NON_COMMERCIAL_LICENSE,
} as HotGlobalConfig
}
],
};
@NgModule({
imports: [ BrowserModule, HotTableModule, CommonModule ],
declarations: [ Example1PasswordCellTypeComponent ],
providers: [...appConfig.providers],
bootstrap: [ Example1PasswordCellTypeComponent ]
})
export class AppModule { }
/* end-file */
HTML
<div>
<example1-password-cell-type></example1-password-cell-type>
</div>

Fixed hash length

By default, every hash has a length equal to the length of its corresponding value. Use option hashLength to set a fixed hash length.

TypeScript
/* file: app.component.ts */
import { Component } from '@angular/core';
import { GridSettings } from '@handsontable/angular-wrapper';
@Component({
selector: 'example2-password-cell-type',
standalone: false,
template: ` <div>
<hot-table [data]="data" [settings]="gridSettings"></hot-table>
</div>`,
})
export class Example2PasswordCellTypeComponent {
readonly data = [
{
id: 1,
name: { first: 'Chris', last: 'Right' },
password: 'plainTextPassword',
},
{ id: 2, name: { first: 'John', last: 'Honest' }, password: 'txt' },
{ id: 3, name: { first: 'Greg', last: 'Well' }, password: 'longer' },
];
readonly gridSettings: GridSettings = {
colHeaders: ['ID', 'First name', 'Last name', 'Password'],
height: 'auto',
autoWrapRow: true,
autoWrapCol: true,
columns: [
{ data: 'id' },
{ data: 'name.first' },
{ data: 'name.last' },
{ data: 'password', type: 'password', hashLength: 10 },
]
};
}
/* end-file */
/* file: app.module.ts */
import { NgModule, ApplicationConfig } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { registerAllModules } from 'handsontable/registry';
import { HOT_GLOBAL_CONFIG, HotGlobalConfig, HotTableModule } from '@handsontable/angular-wrapper';
import { CommonModule } from '@angular/common';
import { NON_COMMERCIAL_LICENSE } from '@handsontable/angular-wrapper';
/* start:skip-in-compilation */
import { Example2PasswordCellTypeComponent } from './app.component';
/* end:skip-in-compilation */
// register Handsontable's modules
registerAllModules();
export const appConfig: ApplicationConfig = {
providers: [
{
provide: HOT_GLOBAL_CONFIG,
useValue: {
license: NON_COMMERCIAL_LICENSE,
} as HotGlobalConfig
}
],
};
@NgModule({
imports: [ BrowserModule, HotTableModule, CommonModule ],
declarations: [ Example2PasswordCellTypeComponent ],
providers: [...appConfig.providers],
bootstrap: [ Example2PasswordCellTypeComponent ]
})
export class AppModule { }
/* end-file */
HTML
<div>
<example2-password-cell-type></example2-password-cell-type>
</div>

Custom hash symbol

By default, every hash consists of asterisks *. Use the option hashSymbol to set a custom hash symbol. You can use any character, entity, or even HTML. Note that you can’t change the symbol used by the input field due to browser limitations.

TypeScript
/* file: app.component.ts */
import { Component } from '@angular/core';
import { GridSettings } from '@handsontable/angular-wrapper';
@Component({
selector: 'example3-password-cell-type',
standalone: false,
template: ` <div>
<hot-table [data]="data" [settings]="gridSettings"></hot-table>
</div>`,
})
export class Example3PasswordCellTypeComponent {
readonly data = [
{
id: 1,
name: { first: 'Chris', last: 'Right' },
password: 'plainTextPassword',
},
{ id: 2, name: { first: 'John', last: 'Honest' }, password: 'txt' },
{ id: 3, name: { first: 'Greg', last: 'Well' }, password: 'longer' },
];
readonly gridSettings: GridSettings = {
colHeaders: ['ID', 'First name', 'Last name', 'Password'],
height: 'auto',
autoWrapRow: true,
autoWrapCol: true,
columns: [
{ data: 'id' },
{ data: 'name.first' },
{ data: 'name.last' },
{ data: 'password', type: 'password', hashSymbol: '&#9632;' },
]
};
}
/* end-file */
/* file: app.module.ts */
import { NgModule, ApplicationConfig } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { registerAllModules } from 'handsontable/registry';
import { HOT_GLOBAL_CONFIG, HotGlobalConfig, HotTableModule } from '@handsontable/angular-wrapper';
import { CommonModule } from '@angular/common';
import { NON_COMMERCIAL_LICENSE } from '@handsontable/angular-wrapper';
/* start:skip-in-compilation */
import { Example3PasswordCellTypeComponent } from './app.component';
/* end:skip-in-compilation */
// register Handsontable's modules
registerAllModules();
export const appConfig: ApplicationConfig = {
providers: [
{
provide: HOT_GLOBAL_CONFIG,
useValue: {
license: NON_COMMERCIAL_LICENSE,
} as HotGlobalConfig
}
],
};
@NgModule({
imports: [ BrowserModule, HotTableModule, CommonModule ],
declarations: [ Example3PasswordCellTypeComponent ],
providers: [...appConfig.providers],
bootstrap: [ Example3PasswordCellTypeComponent ]
})
export class AppModule { }
/* end-file */
HTML
<div>
<example3-password-cell-type></example3-password-cell-type>
</div>

Related guides

Configuration options

Core methods

Hooks