각도표가 있는 각도 대기 응용 프로그램 - 제2부분
8025 단어 beginnerswebdevjavascriptangular
기본 양식 유효성 검사
표에서 나온 데이터를 검증할 수 있는 몇 가지 방법이 있다.우리는 우선
required
속성 in outinput
요소를 사용할 것이다.<input
placeholder="Write a task"
ngModel
name="userInput"
required
/>
MDN에 따르면 required
속성은 "있는 경우 사용자가 입력할 값을 지정해야 소속 양식을 제출할 수 있습니다."그러나 우리의 상황에서 그것은 매우 비참하게 실패했다...
만약 당신이 Add를 눌렀다면, 그것은 항상 뭔가를 기록할 것이다.
이것은 "기본적으로 Angular는 닫힌 폼 탭에 novalidate 속성을 추가하여 HTML 폼 검증을 비활성화하고 명령을 사용하여 프레임의 검증 프로그램 함수와 일치합니다. 이 속성을 Angular 기반 검증과 결합시키려면 ngNativeValidate 명령을 사용하여 다시 사용할 수 있습니다."라는 이유입니다.
ngNativeValidate 명령을 양식 태그에 추가하고 응용 프로그램을 테스트합니다.
좋지는 않지만 효과는 좋다.
전시물
사용자가 추가한 항목을 표시하기 위해 프로그램에 코드를 추가해야 합니다.
템플릿 파일 app부터 시작합니다.구성 요소html.
지금 바로 표 아래에 다음 코드를 추가합니다.
// app.component.html
...
<ul>
<li *ngFor="let item of todoList">{{ item }}</li>
</ul>
그것은 어떤 작용을 합니까?나는 네가 익숙하다고 가정한다ul and li tags.
더 재미있는 것은 ngFor stuff입니다.만약 익숙하지 않다면, 이렇게 *ngFor 문법을 읽을 수 있습니다. todoList의 모든 항목에 대해 새
<li>
를 만들고, 이 항목을 새로 만든 <li>
에 추가할 수 있습니다.토도리스트는 어디에 있습니까?우리 아직 아니야.그러나 말 그대로 todoList는 사용자가 만든 모든 항목을 포함합니다.AppComponent에 todoList라는 배열을 추가합니다.
// app.component.ts
...
export class AppComponent {
userInput = '';
todoList = ['Study Angular', 'Add one elememt', 'Correct typo'];
onSubmit() { ... }
}
userInput의 값을 todoList 배열에 연결하도록 onSubmit을 수정합니다.// app.component.ts
...
onSubmit() {
this.todoList = this.todoList.concat(String(form.form.value.userInput));
}
전반적인 개선 사항
다음과 같은 결과를 위해 몇 줄의 코드를 추가할 것입니다.
// app.component.ts
...
export class AppComponent {
title = 'Ng To Do';
userInput: string;
dateInput: string;
todoList: { id: number; title: string; date?: string }[] = [
{ id: 1, title: 'Study Angular' },
{ id: 2, title: 'Add one elememt' },
{ id: 3, title: 'Correct typo' },
{ id: 4, title: 'Add dates', date: '2022-09-10' },
];
onSubmit(form: NgForm) {
this.todoList = this.todoList.concat({
id: Math.random(),
title: form.form.value.userInput,
date: form.form.value.date,
});
console.log('Submitted', form.form.value);
}
onDelete(id: number) {
this.todoList = this.todoList.filter((item) => item.id !== id);
}
}
이것은 반드시 표를 처리하는 가장 좋은 방식은 아니다.우리는 곧 우리의 통제에 대해 조를 나누기 시작할 것이다.todoList에는
{ id: number; title: string; date?: string }[]
유형이 있습니다.형식은 하나의 대상 그룹입니다. 대상마다 id와 제목을 포함해야 합니다.date 속성 date?
뒤에 물음표를 추가하면 이 속성을 선택할 수 있는 속성으로 만들 수 있습니다.onSubmit에서 UI의 값을 사용하여 새 객체를 만듭니다.그런 다음 객체를 todoList에 연결합니다.
onDelete 방법은number 형식의 id 파라미터를 사용하여 이 id와 관련된 항목을 삭제합니다.
우리의 템플릿은 다음과 같이 변경되었다
// app.component.html
<h1>{{ title }}</h1>
<form (ngSubmit)="onSubmit(myForm)" #myForm="ngForm" ngNativeValidate>
<label for="userInput">Add Task</label>
<input placeholder="Write a task" ngModel name="userInput" required />
<label for="date">By when</label>
<input type="date" name="date" ngModel />
<button type="submit">Add</button>
</form>
<ul>
<li *ngFor="let item of todoList">
<button (click)="onDelete(item.id)">X</button>
{{ item.title }} {{ item.date && 'by' }} {{ item.date ? item.date : '' }}
</li>
</ul>
우리는 각각 li
요소에 단추를 추가했다.단추를 누르면 onDelete 방법을 터치하고 삭제할 요소의 id를 전달합니다.나머지 코드
{{ item.date && 'by' }} {{ item.date ? item.date : '' }}
는 데이터를 조건부로 처리하는 다양한 방식을 표시하기 위해 코드를 추가했다.JavaScript에서 logical AND (&&) 조건이 true일 때만 & & & 의 오른쪽에 값을 표시할 수 있는 조건을 만들었습니다.
conditional (ternary) operator는 데이터를 조건부로 처리하는 또 다른 방법이다.
양식 컨트롤 그룹화
특히 각도 형태는 그룹 제어 가능성을 제공했다.그룹 컨트롤은 사용자 설정 파일 데이터, 사용자 설정 등 정보를 분류별로 그룹화하는 데 도움이 될 수 있습니다.
폼이 매우 작기 때문에, 우리는 설명 입력과 탭을 추가했다.
그리고 userInput과taskDescription과 관련된 모든 요소를 div 표시줄에 포장합니다.우리는div에
ngModelGroup="taskInfo"
를 추가하여 그 중의 원소를 그룹으로 나누었다.// app.component.html
...
<div ngModelGroup="taskInfo">
<label for="userInput">Add Task</label>
<input placeholder="Write a task" ngModel name="userInput" required />
<label for="taskDescription">Description</label>
<input
placeholder="Steps to complete the task"
ngModel
name="taskDescription"
/>
</div>
양식의 값 객체를 기록하여 결과를 볼 수 있습니다.Angular는 userInput 및 taskDescription 값을 포함하는 또 다른 객체인taskInfo 필드를 생성합니다.
컨트롤에서 유사한 필드를 볼 수 있습니다.이것은 그룹의 컨트롤의 모든 속성을 가지고 있기 때문에 매우 멋있다.이것은 우리가 전체 원소 그룹에 대한 응용 형식을 검사할 수 있다는 것을 의미한다. 예를 들어
touched
또는 dirty
.그룹이
touched
인 경우 일부 요소를 렌더링할 수 있습니다.마무리
각도 형태를 사용하려면 다음이 필요합니다.
AppModule
모든 폼 요소를 폼 라벨로 포장하기
선언 컨트롤: 추가
ngModel
와 컨트롤 이름노출 폼 대상: 폼 탭
#myForm="ngForm"
에 ngForm과 같은 로컬 인용을 설정합니다제출: 반에 데이터를 전달하기 위해 표를 제출한다.이벤트 바인딩 사용 가능
(ngSubmit)="onSubmit(myForm)"
그룹 컨트롤: 원소를 분류별로 나누기를 원할 수도 있습니다.
ngModelGroup="group-name"
로 그룹을 나누는 요소를 포장합니다.Reference
이 문제에 관하여(각도표가 있는 각도 대기 응용 프로그램 - 제2부분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/this-is-angular/angular-to-do-app-with-angular-forms-part-2-10fp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)