Angular2+
Содержание
- How to change format ngbdatepicker to 'dd/mm/yyyy'
- Click outside for closing datepicker
- Import moment
- После ng build, не запускалось страница, но для этого нужен хотя бы какой то серв. Решение:
- Если нужно применить стили для всего приложения
- Подключение компонента в главный компонент после генерации
- Что делает
How to change format ngbdatepicker to 'dd/mm/yyyy'
ngb-date-fr-parser-formatter.ts
import { Injectable } from "@angular/core";
import { NgbDateParserFormatter, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap";
function padNumber(value: number) {
if (isNumber(value)) {
return `0${value}`.slice(-2);
} else {
return "";
}
}
function isNumber(value: any): boolean {
return !isNaN(toInteger(value));
}
function toInteger(value: any): number {
return parseInt(`${value}`, 10);
}
@Injectable()
export class NgbDateFRParserFormatter extends NgbDateParserFormatter {
parse(value: string): NgbDateStruct {
if (value) {
const dateParts = value.trim().split('/');
if (dateParts.length === 1 && isNumber(dateParts[0])) {
return {year: toInteger(dateParts[0]), month: null, day: null};
} else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
return {year: toInteger(dateParts[1]), month: toInteger(dateParts[0]), day: null};
} else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {
return {year: toInteger(dateParts[2]), month: toInteger(dateParts[1]), day: toInteger(dateParts[0])};
}
}
return null;
}
format(date: NgbDateStruct): string {
let stringDate: string = "";
if(date) {
stringDate += isNumber(date.day) ? padNumber(date.day) + "/" : "";
stringDate += isNumber(date.month) ? padNumber(date.month) + "/" : "";
stringDate += date.year;
}
return stringDate;
}
}
app.component.ts
...
// these 2 settings
import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
import { NgbDateFRParserFormatter } from "../../settings/ngb-date-fr-parser-formatter";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
providers: [
RequestService,
{provide: NgbDateParserFormatter, useClass: NgbDateFRParserFormatter} // <!-- here
]
})
// after it on a app.component.html it will out dd/mm/yyyy
Click outside for closing datepicker
https://developer.mozilla.org/en-US/docs/Web/API/Event
<input #d1="ngbDatepicker"
(click)="d1.toggle(); openDatepicker($event, d1)"
[(ngModel)]="date"
ngbDatepicker
class="form-control"
placeholder="dd/mm/yyyy">
@Component({
...
host: {
'(document:click)': 'checkDatepicker($event)',
},
})
dynamicId = '';
...
openDatepicker(event, id){
event.stopPropagation();
this.dynamicId = id;
// console.log("Datepicker Reference", id);
}
checkDatepicker(event) {
if(this.dynamicId){
let self = this;
setTimeout(function(){
self.dynamicId.close();
},10);
}
}
Import moment
// .angular-cli.json
{
...
"apps": [
...
"scripts": [
"../node_modules/moment/min/moment.min.js"
]
...
]
...
}
// app.component.js
import * as moment from 'moment'; // add this 1 of 4
...
utc_format: string = 'YYYY-MM-DDTHH:mm:ss.SSSZ';
return moment(date, this.utc_format).format('DD/MM/YYYY HH:mm:ss');
После ng build, не запускалось страница, но для этого нужен хотя бы какой то серв. Решение:
Изменить в index.html
---> <base href="./">
Если нужно применить стили для всего приложения
Тогда надо создать в папке src/app/assets - my-styles.css, и подключить в src/index.html.
Подключение компонента в главный компонент после генерации
Надо теги подключить в app.component.html
<ng-content></ng-content>
Что делает это директива позволит вставить контент внутрь компонента
<app-index-page>hello there</app-index-page>
<!-- indexpage.component.html -->
<p>gggggg</p>
<ng-content></ng-content> <!-- "hello there" goes here -->