Skip to content

lanxuexing/ngx-laydate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

57 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NgxLaydate

The Angular Directive for Laydate, built for modern Angular applications.

NPM package GitHub Release Date GitHub repo size GitHub Stars CI/CD Angular Code style: prettier License

English | ็ฎ€ไฝ“ไธญๆ–‡

๐Ÿ”— Live Demo

Check out the component in action: https://lanxuexing.github.io/ngx-laydate/


โœจ Features

  • ๐Ÿš€ Modern Angular: Built with Standalone Directives, supporting Angular 16+.
  • โšก Optimized Loading: Smart caching ensures the core library is loaded only once per session.
  • ๐Ÿงฑ Easy Integration: Seamless wrapper for the popular Laydate picker (versions >= 5.x).
  • ๐Ÿงฉ Flexible Configuration: Full access to all native Laydate options and events.
  • ๐ŸŽจ Customizable: Determine your own theme color and path configuration.
  • ๐Ÿ“ฆ Lightweight: Minimal overhead, focusing on wrapping the core functionality efficiently.
  • ๐ŸŒ SSR Friendly: Designed to work safely in Server-Side Rendering environments.

๐Ÿ“ฆ Installation

# if you use npm
npm install layui-laydate -S
npm install ngx-laydate -S

# or if you use yarn
yarn add layui-laydate
yarn add ngx-laydate

๐Ÿ”ฅ Pro Tip: To utilize the latest Laydate features, replace "layui-laydate" with "laydate-next" and update the asset dependencies in your angular.json file.

๐Ÿš€ Usage

1. Standalone Component (Recommended)

Import NgxLaydateDirective directly in your component:

import { NgxLaydateDirective, NGX_LAYDATE_CONFIG } from 'ngx-laydate';

@Component({
  standalone: true,
  selector: 'app-root',
  imports: [NgxLaydateDirective],
  providers: [
    {
      provide: NGX_LAYDATE_CONFIG,
      useFactory: () => ({
        // Use standard import or custom path
        // @ts-ignore
        laydate: () => import('layui-laydate'), 
        path: 'assets/laydate/'
      }),
    },
  ],
  template: `
    <input laydate [options]="laydateOption" />
  `
})
export class AppComponent {
   laydateOption = {
      lang: 'en',
      type: 'datetime',
      value: '2023-10-14 00:00:00'
   };
}

2. NgModule (Backwards Compatibility)

Import NgxLaydateModule in your module:

import { NgxLaydateModule } from 'ngx-laydate';

@NgModule({
  imports: [
    NgxLaydateModule.forRoot({
      // @ts-ignore
      laydate: () => import('layui-laydate'), 
      path: 'assets/laydate/'
    }),
  ],
})
export class AppModule {}

3. Configure Assets

Add the laydate assets to your angular.json. This ensures themes and styles load correctly.

{
  "architect": {
    "build": {
      "options": {
        "assets": [
          {
            "glob": "**/*",
            "input": "node_modules/layui-laydate/dist/",
            "output": "assets/laydate"
          }
        ]
      }
    }
  }
}

๐Ÿ“– API

Directive Inputs

Input Type Default Description
[options] LaydateOptions null Configuration object matching the official Laydate documentation.

Events

ngx-laydate proxies native Laydate events with a laydate prefix.

@Output Description
(laydateInit) Emitted when the instance is initialized.
(laydateReady) Emitted when the picker is displayed (ready callback).
(laydateChange) Emitted when the value changes (done callback).
(laydateDone) Same as change, consistent with native naming.
(laydateClose) Emitted when the picker is closed (close callback).

Example:

<input laydate [options]="opts" (laydateDone)="onDone($event)" />
onDone([value, date, endDate]): void {
  console.log('Selected:', value);
  console.log('Date Object:', date);
}

๐Ÿ› ๏ธ Development

Clone the repo and start the demo:

npm install
npm run start

Visit: http://localhost:4200

๐Ÿ”— Links


Built with โค๏ธ by lanxuexing