Listview for Angular and Ionic Framework

Updated on May 17, 2021
Learn More

Advanced list view component with gesture, swipe and drag & drop support.

Use it along Mobiscroll forms, pages or in any web or mobile hybrid app. Suited for small to large screens.

Shipping with useful features for a refined UX, including:

  • Support for alternating row color
  • Use it with single, multi-line text or custom content
  • Render cards instead of full-width rows
  • Enhance content with images, avatars and icons
  • Built-in support for sorting and ordering
  • Multiple data-source support
  • Load on demand capabilities
  • Top positioned sticy header for segmenting the list
  • Simple to advanced grouping capabilities
  • CRUD with undo functionality
  • Full-blown gesture support
  • Hierarchical listviews with variable depth
  • Multiple theme support



As part of Gesture enabled listview it can be picked up with the Framework and Complete licenses or with the component license.


Listview available for other frameworks.

Viewing demos & code for

Angular and Ionic Listview Filtering

Dynamically filter listview content. Add/remove items or call a full reload.
My Schedule
    • Owen Adams

      Sunholdings Corp.

      Sat 29 09:20
    • Kian Phillips

      sol-flex Corp.

      Sat 29 11:25

    Listview - Basic

    Change demo
    Basic
    Angular Listview demo for creating a simple list of items. Add stripes for alternating background colors of list items. For Angular 19 and Ionic 8.
    Copy code

    Listview - Content

    Change demo
    Content
    Angular Listview demo for rendering different types of content. Use it for multi-line text, cards or any content with custom CSS. For Angular 19 and Ionic 8.
    Copy code

    Listview - Image/Icon/Avatar

    Change demo
    Image/Icon/Avatar
    Angular Listview image demo for rendering content with regular images, icons and avatars. Customize it with custom CSS. For Angular 19 and Ionic 8.
    Copy code

    Listview - Selecting items

    Change demo
    Selecting items
    Angular Listview item selection example. Select a single item or enable multiple selection for batch operations. For Angular 19 and Ionic 8.
    Copy code

    Listview - Sorting & ordering

    Change demo
    Sorting & ordering
    Angular Listview reorder demo. Grab and sort from drag handle on the left or right side, or tap/click and hold to sort. For Angular 19 and Ionic 8.
    Copy code

    Listview - Sticky header

    Change demo
    Sticky header
    Angular Listview demo with sticky header. List out names or contacts grouped alphabetically with the first letter on top. For Angular 19 and Ionic 8.
    Copy code

    Listview - Grouping

    Change demo
    Grouping
    Angular Listview demo with group headers. Use it to logically segment and group items without creating multiple lists. For Angular 19 and Ionic 8.
    Copy code

    Listview - Create, Read, Update, Delete

    Change demo
    Create, Read, Update, Delete
    Angular Listview demo with CRUD operations & swipe actions. Slide right to update and left to delete items. For Angular 19 and Ionic 8.
    Copy code

    Listview - Remove/Undo

    Change demo
    Remove/Undo
    Angular Listview demo with swipe-away delete and built-in undo functionality. Use it for laying out notifications or any data. For Angular 19 and Ionic 8.
    Copy code

    Listview - Swipe actions

    Change demo
    Swipe actions
    Angular Listview demo with swipe revealing actions. Render an action list or action menu when sliding items left and right. For Angular 19 and Ionic 8.
    Copy code

    Listview - Hierarchy

    Change demo
    Hierarchy
    Angular Listview with multi-level hierarchy and drill-down interface. Featuring images, icons and text. For Angular 19 and Ionic 8.
    Copy code

    Listview - Checklist

    Change demo
    Checklist
    Angular Drag & Drop checklist/tasklist with swipe actions to add/remove items from todo listview. Sorting is supported. For Angular 19 and Ionic 8.
    Copy code

    Listview - Filtering

    Change demo
    Filtering
    Angular Listview demo with dynamic data and live filtering. Add and remove items on the fly or reload the full list. For Angular 19 and Ionic 8.
    Copy code
    import { Component } from '@angular/core';
    import { mobiscroll, MbscRangeOptions, MbscListviewOptions } from '@mobiscroll/angular';
    
    mobiscroll.settings = {
        theme: 'ios',
        themeVariant: 'light'
    };
    
    let now = new Date();
    
    @Component({
        selector: 'app-root',
        templateUrl: './app.component.html'
    })
    export class AppComponent {
        constructor() {
            let i,
                item,
                tempTime;
    
            // Genarate random dates
            for (i = 0; i < this.data.length; i++) {
                item = this.data[i];
                tempTime = new Date(
                    now.getFullYear(),
                    now.getMonth(),
                    now.getDate() + (i > 5 ? (i - 5) : 0),
                    now.getHours() + i * 2,
                    Math.round((now.getMinutes() + i * 5) / 5) * 5);
                item.date = tempTime;
                item.formatedTime = mobiscroll.util.datetime.formatDate('D d hh:ii', tempTime);
            }
    
            this.filter();
        }
    
        filteredData:any = [];
    
        filters: any = {
            range: 'today',
            calls: true,
            meetings: true,
            customRange: [
                new Date(now.getFullYear(), now.getMonth(), now.getDate()),
                new Date(now.getFullYear(), now.getMonth(), now.getDate() + 6)
            ]
        }
    
        data = [{
            id: 1,
            name: "Owen Adams",
            company: "Sunholdings Corp.",
            icon: "phone",
            type: "call"
        }, {
            id: 2,
            name: "Kian Phillips",
            company: "sol-flex Corp.",
            icon: "location",
            type: "meeting"
        }, {
            id: 3,
            name: "Robert Bradley",
            company: "Silvermedia",
            icon: "location",
            type: "meeting"
        }, {
            id: 4,
            name: "Lydia Young",
            company: "Zimplex",
            icon: "phone",
            type: "call"
        }, {
            id: 5,
            name: "Hollie Hudson",
            company: "Stanelectrics",
            icon: "location",
            type: "meeting"
        }, {
            id: 6,
            name: "Lynn Elliott",
            company: "Techhex",
            icon: "location",
            type: "meeting"
        }, {
            id: 7,
            name: "Konner Murray",
            company: "HACME Corp.",
            icon: "phone",
            type: "call"
        }, {
            id: 8,
            name: "Morgan Downs",
            company: "Itex Corp.",
            icon: "location",
            type: "meeting"
        }, {
            id: 9,
            name: "Warren Boone",
            company: "Sumline",
            icon: "location",
            type: "meeting"
        }, {
            id: 10,
            name: "Charlie Jenkins",
            company: "Quaddoex",
            icon: "phone",
            type: "call"
        }, {
            id: 11,
            name: "Jillian Hobbs",
            company: "Indizap",
            icon: "location",
            type: "meeting",
            formatedTime: ''
        }, {
            id: 12,
            name: "Donald Mccormick",
            company: "Zootrax",
            icon: "phone",
            type: "call"
        }, {
            id: 13,
            name: "Luke Harper",
            company: "Unihouse",
            icon: "phone",
            type: "call"
        }, {
            id: 14,
            name: "Leah West",
            company: "Ap-care",
            icon: "phone",
            type: "call"
        }, {
            id: 15,
            name: "Billie Rivas",
            company: "Technoit Corp.",
            icon: "location",
            type: "meeting"
        }, {
            id: 16,
            name: "Janae Diaz",
            company: "Plex-ron Corp.",
            icon: "location",
            type: "meeting"
        }, {
            id: 17,
            name: "Raquel Bentley",
            company: "Silicon-lax",
            icon: "phone",
            type: "call"
        }, {
            id: 18,
            name: "Harley Burke",
            company: "Lamzone",
            icon: "location",
            type: "meeting"
        }];
    
        listviewSettings: MbscListviewOptions = {
            enhance: true,
            swipe: false,
            striped: true
        };
    
        filter() {
            var i,
                item,
                start,
                end,
                range,
                filteredData = [];
    
            switch (this.filters.range) {
                case 'today':
                    start = new Date(now.setHours(0, 0, 0, 0));
                    end = new Date(now.setHours(23, 59, 59, 999));
                    break;
                case 'week':
                    start = new Date(now.setHours(0, 0, 0, 0));
                    end = new Date(
                        now.getFullYear(),
                        now.getMonth(),
                        now.getDate() + (7 - now.getDay()), 23, 59, 59, 999
                    );
                    break;
                default:
                    range = this.filters.customRange;
                    start = range[0];
                    end = range[1];
            }
    
            for (i = 0; i < this.data.length; i++) {
                item = this.data[i];
                if ((
                        (item.type == 'call' && this.filters.calls) ||
                        (item.type == 'meeting' && this.filters.meetings)
                    ) && (item.date >= start) && (item.date <= end)) {
                    filteredData.push(item);
                }
            }
    
            this.filteredData = filteredData;
        }
    
        onChange() {
            setTimeout(() => {
                this.filter();
            });
        }
    }
    <mbsc-form class="md-schedule">
        <div>
            <mbsc-segmented-group [(ngModel)]="filters.range" (change)="onChange()">
                <mbsc-segmented value="today">Today</mbsc-segmented>
                <mbsc-segmented value="week">This Week</mbsc-segmented>
                <mbsc-segmented value="custom" (click)="mbscRange.instance.show()">Custom</mbsc-segmented>
            </mbsc-segmented-group>
    
    
            <div mbsc-range [(ngModel)]="filters.customRange" #mbscRange="mobiscroll" (onSet)="onChange()"></div>
    
            <mbsc-switch [(ngModel)]="filters.calls" (change)="onChange()">Show calls</mbsc-switch>
            <mbsc-switch [(ngModel)]="filters.meetings" (change)="onChange()">Show meetings</mbsc-switch>
        </div>
        <mbsc-form-group>
            <mbsc-form-group-title>My Schedule</mbsc-form-group-title>
            <div class="mbsc-empty" *ngIf="filteredData.length == 0">
                <h3>Nothing scheduled</h3>
            </div>
            <mbsc-listview [options]="listviewSettings">
                <mbsc-listview-item *ngFor="let item of filteredData" icon="{{ item.icon }}">
                    <h4>{{ item.name }}</h4>
                    <h4>{{ item.company }}</h4>
                    <span class="md-time" style="position:absolute;right:1.25em;top:50%;margin-top:-9px;">{{ item.formatedTime }}</span>
                </mbsc-listview-item>
            </mbsc-listview>
        </mbsc-form-group>
    </mbsc-form>
    .demo-main-cont.demo-comp-listview { padding: 0; }
    .demo-comp-listview .demo-note { margin: 10px; }
    
    
    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    import { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';
    import { FormsModule, ReactiveFormsModule } from '@angular/forms';
    import { MbscModule } from '@mobiscroll/angular';
    import { AppComponent } from './app.component';
    
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        MbscModule,
        FormsModule,
        ReactiveFormsModule,
        HttpClientModule,
        HttpClientJsonpModule
      ],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    
    Show more code

    Listview - Data sources

    Change demo
    Data sources
    Angular Listview demo with different ways of getting and passing data. Supporting hardcoded lists, dynamic and remote data. For Angular 19 and Ionic 8.
    Copy code

    Listview - Load on demand

    Change demo
    Load on demand
    Angular Listview load on demand demo. Load data from a REST service and populate the list as users scroll content. For Angular 19 and Ionic 8.
    Copy code

    Listview - Load more

    Change demo
    Load more
    Angular Listview demo with load more button for loading additional items from a REST service. Get and display records from JSON. For Angular 19 and Ionic 8.
    Copy code

    Listview - Master-detail view

    Change demo
    Master-detail view

    Build a two pane master-detail view with the help of the listview. Use the grid layout to set up the two columns - left side for a list of names, right side for showing the details. If you want to get into the details you could even hide the first column and build a drawer or use a hamburger menu for the master list.

    Use the navigation component for the tabs and cards for building the layout of the details view.

    Want to learn more about building responsive layouts?  Check out the grid layout →
    Copy code

    Listview - Event handlers

    Change demo
    Event handlers
    Angular Listview demo with event hooks for deep integration and custom functionality. With source code. For Angular 19 and Ionic 8.
    Clear event log
    EVENTS FIRED: 
    Copy code

    Listview - Quick Navigation

    Change demo
    Quick Navigation
    Angular Listview demo with quick access to list segments. Alphabetically group items and provide a tab list for selection. For Angular 19 and Ionic 8.
    Copy code

    Looking for something you didn't see or have a sales question?
    Ask us about it, we're here to help.

    Customize & try demos locally
    Sign in or start your free trial

    What framework are you using?

    Javascript
    jQuery
    AngularJS
    Angular
    React
    Other
    Ionic Angular
    Email address

    Install demo in your app
    Follow this quick, two minute install guide
    Close window

    Step 1.Install the Mobiscroll CLI from npm

    Copy command
    $ npm install -g @mobiscroll/cli

    The CLI makes configuring your apps super simple 👍

    Step 2.Run the following command in the root folder of your Ionic project

    Copy command
    $ mobiscroll config ionic --version=4

    You will be prompted to log in with your mobiscroll account. Set your password here

    Step 3.Copy the code into your app.

    Copy TS
    Copy HTML
    Copy CSS
    Copy Module

    Step 4.Run ionic serve in the root folder of your app 🎉

    Copy command
    $ ionic serve

    And voilà, everything should be running smoothly.

    Install demo in your app
    Follow this quick, two minute install guide
    Close window

    Step 1.Install the Mobiscroll CLI from npm

    Copy command
    $ npm install -g @mobiscroll/cli

    The CLI makes configuring your apps super simple 👍

    Step 2.Run the following command in the root folder of your Ionic project

    Copy command
    $ mobiscroll config ionic --version=4

    You will be prompted to log in with your mobiscroll account. Set your password here

    Step 3.Copy the code into your app.

    Copy TSX
    Copy CSS

    Step 4.Run ionic serve in the root folder of your app 🎉

    Copy command
    $ ionic serve

    And voilà, everything should be running smoothly.

    Customize & try demos locally
    How would you like to do it?
    Install demo in your app
    Follow this quick, two minute install guide
    Close window

    Step 1.Install the Mobiscroll CLI from npm

    Copy command
    $ npm install -g @mobiscroll/cli

    The CLI makes configuring your apps super simple 👍

    Step 2.Run the following command in the root folder of your Angular project

    Copy command
    $ mobiscroll config angular --version=4

    You will be prompted to log in with your mobiscroll account. Set your password here

    Step 3.Copy the code into your app. HTML goes into the markup, TS into Typescript.

    Copy TS
    Copy HTML
    Copy CSS
    Copy Module

    Step 4.Run ng serve in the root folder of your app 🎉

    Copy command
    $ ng serve

    And voilà, everything should be running smoothly.

    Thanks for downloading
    Try and customize the app locally

    Extract the zip file and run the project like any Ionic app. Make sure to have Ionic CLI installed and open the terminal in the app root folder.

    Step 1. Run in root folder
    $ npm install
    Step 2. Start the app
    $ ionic serve

    Let us know if we can help and enjoy!

    Thanks for downloading
    Customize demos locally

    We have set up a trial so that you can try the demos locally.

    Extract the zip file and open the demo in your favorite browser. To install Mobiscroll in your project follow instructions from this page.


    Let us know if we can help and enjoy! 👍

    Thanks for downloading
    Customize demos locally

    Please extract the zip file and run the project like any Angular CLI app. Make sure to have the Angular CLI installed.

    For installation and usage, extract the zip file and open a terminal window and follow these steps.

    Step 1. Run in root folder
    $ npm install
    Step 2. Start the app
    $ ng serve --open

    Let us know if we can help and enjoy! 👍

    Thanks for downloading
    Customize demos locally

    We have set up a trial so that you can try the demos locally.

    The easiest way to get started is to follow the installation steps and by grabbing the code directly from the demo page. Let us know if we can help and enjoy! 👍

    You'll find a fully functional Kitchen-sink Ionic app in the zip file.

    Thanks for downloading
    Customize demos locally

    We have set up a trial so that you can try the demos locally.

    The demos are using Babel's in-browser ES6 and JSX transformer.
    Extract the zip file and open the demo in your browser. To install Mobiscroll in your project follow instructions from this page.


    Let us know if we can help and enjoy! 👍

    Customize & try this demo locally
    Sign in or start your free trial

    We have to set you up with a trial for this to run 👍

    Email address

    Need to update your password?
    Demos
    Theme Select
    Mobiscroll
    Material
    Material Dark
    iOS
    iOS Dark
    Windows
    Windows Dark
    Language Locale
    See other demos and change options
    Theme
    Locale
    See other demos