Skip to content

Commit

Permalink
第 10 天 別說呂布了,你聽過青銅五小強嗎 |Template-driven-form、ngModel、Template variables
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasysh committed Sep 25, 2021
1 parent 249ea67 commit 0387fb2
Show file tree
Hide file tree
Showing 15 changed files with 179 additions and 5 deletions.
14 changes: 12 additions & 2 deletions src/app/app-routing.module.ts
@@ -1,8 +1,10 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

import { HeroDetailComponent } from './hero-detail/hero-detail.component';
import { HeroListComponent } from './hero-list/hero-list.component';
import { HeroDetailComponent } from './hero-detail/hero-detail.component';
import { AddHeroPageComponent } from './pages/add-hero-page/add-hero-page.component';
import { EditHeroPageComponent } from './pages/edit-hero-page/edit-hero-page.component';

const routes: Routes = [
{
Expand All @@ -17,10 +19,18 @@ const routes: Routes = [
path: '',
component: HeroListComponent
},
{
path: 'add',
component: AddHeroPageComponent
},
{
path: 'edit',
component: EditHeroPageComponent
},
{
path: ':id',
component: HeroDetailComponent,
}
},
]
},
]
Expand Down
12 changes: 10 additions & 2 deletions src/app/app.module.ts
Expand Up @@ -12,14 +12,20 @@ import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HeroListComponent } from './hero-list/hero-list.component';
import { HeroDetailComponent } from './hero-detail/hero-detail.component';

import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AddHeroPageComponent } from './pages/add-hero-page/add-hero-page.component';
import { EditHeroPageComponent } from './pages/edit-hero-page/edit-hero-page.component';
import { HeroInformationFormComponent } from './shared/components/hero-information-form/hero-information-form.component';


@NgModule({
declarations: [
AppComponent,
HeroListComponent,
HeroDetailComponent
HeroDetailComponent,
HeroInformationFormComponent,
AddHeroPageComponent,
EditHeroPageComponent,
],
imports: [
AppRoutingModule,
Expand All @@ -30,6 +36,8 @@ import { HeroDetailComponent } from './hero-detail/hero-detail.component';
MatButtonModule,
MatDividerModule,
MatListModule,
FormsModule,
ReactiveFormsModule
],
providers: [],
bootstrap: [AppComponent]
Expand Down
Empty file.
2 changes: 2 additions & 0 deletions src/app/pages/add-hero-page/add-hero-page.component.html
@@ -0,0 +1,2 @@
<h1>新增英雄</h1>
<app-hero-information-form></app-hero-information-form>
25 changes: 25 additions & 0 deletions src/app/pages/add-hero-page/add-hero-page.component.spec.ts
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { AddHeroPageComponent } from './add-hero-page.component';

describe('AddHeroPageComponent', () => {
let component: AddHeroPageComponent;
let fixture: ComponentFixture<AddHeroPageComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AddHeroPageComponent ]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(AddHeroPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
14 changes: 14 additions & 0 deletions src/app/pages/add-hero-page/add-hero-page.component.ts
@@ -0,0 +1,14 @@
import { Component, OnInit } from '@angular/core';

@Component({
templateUrl: './add-hero-page.component.html',
styleUrls: ['./add-hero-page.component.css']
})
export class AddHeroPageComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}
Empty file.
1 change: 1 addition & 0 deletions src/app/pages/edit-hero-page/edit-hero-page.component.html
@@ -0,0 +1 @@
<p>edit-hero-page works!</p>
25 changes: 25 additions & 0 deletions src/app/pages/edit-hero-page/edit-hero-page.component.spec.ts
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { EditHeroPageComponent } from './edit-hero-page.component';

describe('EditHeroPageComponent', () => {
let component: EditHeroPageComponent;
let fixture: ComponentFixture<EditHeroPageComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ EditHeroPageComponent ]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(EditHeroPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
14 changes: 14 additions & 0 deletions src/app/pages/edit-hero-page/edit-hero-page.component.ts
@@ -0,0 +1,14 @@
import { Component, OnInit } from '@angular/core';

@Component({
templateUrl: './edit-hero-page.component.html',
styleUrls: ['./edit-hero-page.component.css']
})
export class EditHeroPageComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}
@@ -0,0 +1,17 @@
<div class="form-field">
<label for="name">NAME</label>
<input
#tName="ngModel"
name="name"
ngModel
required
type="text"
id="name" />
</div>

<button
type="button"
[disabled]="tName.invalid">
儲存
</button>

@@ -0,0 +1,18 @@
textarea, input {
&.ng-invalid.ng-touched {
border: 1px solid red;
}
}

.form-field {
display: flex;
flex-direction: column;
margin-bottom: 8px;
}

form {
padding-top: 32px;
width: 50%;
min-width: 300px;
margin: 0 auto;
}
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { HeroInformationFormComponent } from './hero-information-form.component';

describe('HeroInformationFormComponent', () => {
let component: HeroInformationFormComponent;
let fixture: ComponentFixture<HeroInformationFormComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ HeroInformationFormComponent ]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(HeroInformationFormComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-hero-information-form',
templateUrl: './hero-information-form.component.html',
styleUrls: ['./hero-information-form.component.scss']
})

export class HeroInformationFormComponent implements OnInit {

constructor() {}

ngOnInit(): void {}

}
2 changes: 1 addition & 1 deletion src/app/shared/models/hero.model.ts
@@ -1,5 +1,5 @@
export interface Hero {
id: number; // id
id?: number; // id
name: string; // 姓名
image?: string; // 圖像
hp: string; // 生命值
Expand Down

0 comments on commit 0387fb2

Please sign in to comment.