---
# System prepended metadata

title: ng + bootstrap-datepicker
tags: [chatgpt]

---

# ng + bootstrap-datepicker

[TOC]

###### tags: `chatgpt`

---

## 以 Angular 14、ng-bootstrap 搞一個 form 處理的專案，template-driven 跟 reactive forms 都要

好的，以下是以 Angular 14 和 ng-bootstrap 搭配 template-driven 和 reactive forms 來建立一個 form 處理專案的步驟：

1. 創建一個新的 Angular 專案，可以使用 Angular CLI：

```shell
ng new my-form-project
```

2. 安裝 ng-bootstrap 套件：

```shell
npm install --save @ng-bootstrap/ng-bootstrap
```

3. 引入需要使用的 `ng-bootstrap` 模塊，在 `app.module.ts` 中引入 `NgbModule`：

```typescript
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; // 引入 FormsModule 和 ReactiveFormsModule
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; // 引入 NgbModule

import { AppComponent } from './app.component';

@NgModule({
	declarations: [AppComponent],
	imports: [BrowserModule, FormsModule, ReactiveFormsModule, NgbModule], // 引入 NgbModule
	providers: [],
	bootstrap: [AppComponent],
})
export class AppModule {}
```

4. 創建一個新的組件，例如 `app-form.component`：

```shell
ng generate component app-form
```

5. 在 `app-form.component.html` 中創建一個表單，包括 template-driven 和 reactive forms 的範例：

```html
<h1>Template-driven form</h1>
<form #templateForm="ngForm">
	<div class="form-group">
		<label for="name">Name</label>
		<input type="text" class="form-control" id="name" name="name" ngModel required>
	</div>
	<div class="form-group">
		<label for="email">Email</label>
		<input type="email" class="form-control" id="email" name="email" ngModel required email>
	</div>
	<button type="submit" class="btn btn-primary">Submit</button>
</form>

<hr>

<h1>Reactive form</h1>
<form [formGroup]="reactiveForm" (ngSubmit)="onSubmit()">
	<div class="form-group">
		<label for="name">Name</label>
		<input type="text" class="form-control" id="name" formControlName="name">
	</div>
	<div class="form-group">
		<label for="email">Email</label>
		<input type="email" class="form-control" id="email" formControlName="email">
	</div>
	<button type="submit" class="btn btn-primary">Submit</button>
</form>
```

6. 在 `app-form.component.ts` 中添加相應的邏輯：

```typescript
import { Component } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';

@Component({
	selector: 'app-form',
	templateUrl: './app-form.component.html',
})
export class AppFormComponent {
	reactiveForm: FormGroup;

	constructor(private fb: FormBuilder) {
		// 初始化 reactive form
		this.reactiveForm = this.fb.group({
			name: ['', Validators.required],
			email: ['', [Validators.required, Validators.email]],
		});
	}

	onSubmit() {
		console.log(this.reactiveForm.value);
	}
}
```

7. 在 `app.component.html` 中使用 `app-form` 組件：

```html
<app-form></app-form>
```

## 在 Angular 14 專案如何實作 uxsolutions 的 bootstrap-datepicker

以下是在 Angular 14 專案中使用 uxsolutions 的 bootstrap-datepicker 的步驟：

1. 安裝 bootstrap 和 bootstrap-datepicker 的相關套件：

```shell
npm install --save bootstrap jquery @popperjs/core bootstrap-datepicker
```

2. 在 `angular.json` 中添加相關的引用：

```json
{
	"architect": {
		"build": {
			"options": {
				"styles": [
					"node_modules/bootstrap/dist/css/bootstrap.min.css",
					"node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css",
					"src/styles.css"
				],
				"scripts": [
					"node_modules/jquery/dist/jquery.min.js",
					"node_modules/@popperjs/core/dist/umd/popper.min.js",
					"node_modules/bootstrap/dist/js/bootstrap.min.js",
					"node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"
				]
			}
		}
	}
}
```

3. 在 `app.module.ts` 中引入所需的模塊：

```typescript
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import * as $ from 'jquery'; // 引入 jQuery
import * as bootstrap from 'bootstrap'; // 引入 Bootstrap
import * as bootstrapDatepicker from 'bootstrap-datepicker'; // 引入 bootstrap-datepicker

@NgModule({
	declarations: [AppComponent],
	imports: [BrowserModule, FormsModule, NgbModule],
	providers: [],
	bootstrap: [AppComponent],
})
export class AppModule {
	constructor() {
	// 初始化日期選擇器
		$('.datepicker').datepicker({
			format: 'yyyy/mm/dd',
			autoclose: true,
			todayHighlight: true,
		});
	}
}
```

4. 在 `app.component.html` 中添加日期選擇器：

```html
<input type="text" class="form-control datepicker" [(ngModel)]="date">
```

5. 啟動應用程序，並在日期輸入框中單擊以查看日期選擇器。

## Alibaba Cloud Linux 3 的 docker image 在哪個 registry 找得到

您可以在阿里雲的 Container Registry 中找到 Alibaba Cloud Linux 3 的 Docker Image。以下是該映像的地址：

```
registry.cn-hangzhou.aliyuncs.com/acs/alinux
```

要下載此映像，您需要先登錄到 Container Registry，方法如下：

1. 首先，使用您的阿里雲帳戶登錄到 Container Registry。在命令行中輸入以下命令：


```shell
docker login --username=<您的阿里雲帳戶名稱> registry.cn-hangzhou.aliyuncs.com
```

2. 輸入您的密碼，以完成登錄。

3. 現在，您可以使用以下命令來下載 Alibaba Cloud Linux 3 映像：

```shell
docker pull registry.cn-hangzhou.aliyuncs.com/acs/alinux:3.0
```

注意，這個映像標籤是 "`:3.0`"，這表示您正在下載版本 **`3`** 的映像。如果您需要不同的版本，請使用不同的標籤。

完成後，您可以使用 `docker run` 命令來運行此映像。例如，以下命令將運行一個容器並打印版本信息：

```shell
docker run --rm registry.cn-hangzhou.aliyuncs.com/acs/alinux:3.0 cat /etc/os-release
```

希望這能幫助到您。
