<!DOCTYPE html>
<html>
<head>
<script src="./lib/main.ts"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.1/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<my-app>
loading...
</my-app>
</body>
</html>
//our root app component
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { Component, NgModule, OnInit } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormBuilder, FormGroup, FormArray, FormControl } from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<ng-container>
<form [formGroup]="form" (ngSubmit)="doSubmit()" novalidate>
<div *ngFor="let data of weekDays; let i = index" class="form-item">
<input type="checkbox" [id]="data.id" [value]="data.value"
(change)="onCheckboxChange($event)" [checked]="data.checked" />
<label [for]="data.id">{{ data.name }}</label>
</div>
<div>
<label for="startDate">Start Date: </label>
<input type="date" id="startDate" formControlName="startDate" />
</div>
</form>
<p *ngIf="display" class="display">
{{ display }}
</p>
</ng-container>
`,
})
export class App {
form: FormGroup;
display: string = null;
weekDays: Array<any> = [
{ name: 'Sunday (1)', value: 1, id: 'sunday', checked: false },
{ name: 'Monday (2)', value: 2, id: 'monday', checked: false },
{ name: 'Tuesday (3)', value: 3, id: 'tuesday', checked: false },
{ name: 'Wednesday (4)', value: 4, id: 'wednesday', checked: false },
{ name: 'Thursday (5)', value: 5, id: 'thursday', checked: false },
{ name: 'Friday (6)', value: 6, id: 'friday', checked: false },
{ name: 'Saturday (7)', value: 7, id: 'saturday', checked: false }
];
constructor(private builder: FormBuilder) {
this.form = this.builder.group({
checkboxes: this.builder.array([]),
startDate: ['2021-08-01']
});
}
// NOT USING, but an example of an incoming edit
fillCheckboxes() {
let vals = [7,3,1];
const checkArray: FormArray = this.form.get('checkboxes') as FormArray;
this.weekDays.forEach(day => {
vals.forEach(val => {
if (val === parseInt(day.value, 10)) {
day.checked = true;
checkArray.push(new FormControl(parseInt(day.value, 10)));
}
});
});
this.display = String(this.form.get('checkboxes').value);
}
onCheckboxChange(e) {
const checkArray: FormArray = this.form.get('checkboxes') as FormArray;
if (e.target.checked) {
checkArray.push(new FormControl(parseInt(e.target.value, 10)));
} else {
let i = 0;
checkArray.controls.forEach((item: FormControl) => {
if (item.value == parseInt(e.target.value, 10)) {
checkArray.removeAt(i);
return;
}
i++;
});
}
this.display = String(this.form.get('checkboxes').value);
}
}
@NgModule({
imports: [
BrowserModule,
ReactiveFormsModule,
FormsModule
],
declarations: [App],
bootstrap: [App],
})
export class AppModule {}
// Shim the environment
import 'core-js/client/shim';
// Angular requires Zones to be pre-configured in the environment
import 'zone.js/dist/zone';
//main entry point
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app';
import './style.css';
platformBrowserDynamic().bootstrapModule(AppModule);
* {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: 1rem;
}
.form-item {
display: flex;
margin-bottom: 5px;;
}
.form-item label {
flex-basis: 15%;
flex: auto;
font-size: 0.8rem;
cursor: pointer;
top: -3px;
position: relative;
margin-left: 5px;
}
input[type=submit], input[type=button] {
font-size: 0.8rem;
margin-right: 5px;
}
p.display {
margin-top: 10px;
}
{
"name": "@plnkr/starter-angular",
"version": "1.0.3",
"description": "Angular starter template",
"dependencies": {
"@angular/common": "^8.2.14",
"@angular/compiler": "^8.2.14",
"@angular/core": "^8.2.14",
"@angular/platform-browser": "^8.2.14",
"@angular/platform-browser-dynamic": "^8.2.14",
"@angular/forms": "^8.2.14",
"core-js": "2.6.11",
"rxjs": "6.5.4",
"zone.js": "0.10.2"
},
"main": "./lib/main.ts",
"plnkr": {
"runtime": "system",
"useHotReload": true
}
}
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}