Angular module using fuse.js to fuzzy-search through a list of objects. Also easily highlight matched terms which is the true added value of this module.
Demo: https://maleblond.github.io/angular-fusejs/
This module is available through npm. It is compatible with module bundlers (webpack / browserify ...).
npm install angular-fusejs
FusejsModule
into your module:
import {FusejsModule} from 'angular-fusejs'
@NgModule({
imports: [
...
FusejsModule,
],
...
})
Use fusejs
pipe in a *ngFor to search through a list of elements. Pass search string as first parameter. Pass fusejs option object as second parameter (optional):
<li *ngFor="let element of (listOfElement | fusejs:searchString:{keys: ['name', 'author']})"></li>
Params:
Supports all fusejs options (see http://fusejs.io/) and also those:
By default, here are the options set by angular-fusejs:
{
supportHighlight: true,
shouldSort: false,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 2,
includeScore: true,
minSearchTermLength: 3,
fusejsHighlightKey: 'fuseJsHighlighted',
fusejsScoreKey: 'fuseJsScore',
}
You can override those default options by injecting FusejsService
in your app and setting FusejsService.defaultOptions
to whatever you want.
{{element.fuseJsHighlighted.whateverAttribute}}
Replace whateverAttribute
with your attribute name, trust it as HTML and you are good to go.
I made this just for fun, to learn a bit more about fuzzy search + angular. Fuzzy search + detecting what should be highlighted is 100% handled by fuse.js.
If you encounter any bug, please check who is the culprit before submitting an issue - it might be a bug in fuse.js library.