


git basic1 - input output 없는것
git basic2- 있는 것
// 인터페이스를 쓰신것이 아니라 type을 쓰셨을 interface와 type의 차이는?
type Todo = {
id: number;
content: string;
done: boolean;
};
타입스크립트에서 type 과 interface 더 알아보기
type은 모든 타입을 선언할 때 사용할 수 있고, interface는 객체에 대한 타입을 선언할 때만 사용할 수 있다.
또한 확장 불가능한 타입을 선언하고 싶다면 type을 사용하면 되고, 확장 가능한 타입을 선언하고 싶다면 interface를 사용하면 된다.
<addtodo 버튼>
angular page.html와 component.html 차이
따라서 page.html과 component.html의 주요 차이는 다음과 같습니다:
즉, page.html은 여러 컴포넌트를 조합하여 페이지의 레이아웃을 정의하는 데 사용되고, component.html은 해당 컴포넌트의 뷰를 정의하는 데 사용됩니다.
$ ng serve -o
Error: This command is not available when running the Angular CLI outside a workspace.
해결방법
"작업 영역 오류 외부에서 Angular CLI를 실행할 때 이 명령을 사용할 수 없습니다." 오류를 수정하려면 Visual Studio Code에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 "통합 터미널에서 열기" 옵션을 클릭하세요.
터미널에서 프로젝트가 열리고 오류가 수정됩니다. 이제 문제 없이 터미널에서 “ng Serve –open” 또는 “ng Serve” 명령을 실행할 수 있습니다 .
//
addtodo() {
if (!this.inputValue) {
alert('입력하신후 눌러주세요!');
}
}
왜 안뜸?
바보다 입력값을 넣고 버튼을 누르면서 확인 하고 있었음

addtodo 함수 안에 저걸 안 넣어서 그럼 레전드… 스코프 잘 보기 😡😡😡😡
lastItem = this.todos[this.todos.length - 1].id;
newTodo = {
id: this.lastItem + 1,
title: this.inputValue,
done: false,
};
for문 사용
@for(todo of todos; track todo.id)
todos - 반복될 걸레션 반복가능한 배열 및 대상
todo - 반복에서 현재 항목을 보유 / todos 배열에서의 객체 1개
track- 각 요소에 전달 할 식별자를 나타냄
track todo.id 앵귤러에게 각 렌더링 된 돔을 todo( todos 배열의 객체)
의 id 값으로 식별하도록 지시
<div>
<input type="text" placeholder="입력" [(ngModel)]="inputValue" />
<button (click)="addtodo()">추가하기</button>
</div>
@for (todo of todos; track todo.id) {
<ul>
<li>
{{ todo.title }}
</li>
</ul>
}
addtodo() {
if (!this.inputValue) {
alert('입력하신후 눌러주세요!');
}
const lastItem = this.todos[this.todos.length - 1].id;
const newTodo = {
id: lastItem + 1,
title: this.inputValue,
done: false,
};
this.todos.push(newTodo);
}
삭제 하기는 filter 함수를 써서 다시 새로운 배열을 만들어서 해야함
@for (todo of todos; track todo.id) {
<ul>
<li>
{{ todo.title }}
<button (clkick)="remove(todo)">삭제하기</button>
</li>
</ul>
//remove 안에 들어가는 todo는 for문에서 있는 todos 배열의 객체를 todo를 뜻함
remove(todos: Todo) {
this.todos.filter((item) => item.id !== todos.id);
}
@for (todo of todos; track todo.id) {
<ul>
<input type="checkbox" [(ngModel)]="todo.done" />
// todo.done은 for배열의 객체 todo의 속성done을 말하는 듯
[(ngModel)]: 이것은 "바나나 상자" 구문이라고도 하며, Angular에서 양방향 데이터 바인딩 구문입니다. 이는 컴포넌트 클래스와 템플릿 간의 속성을 바인딩하는 단축 구문입니다.todo.done: 이는 todo 객체의 속성 done을 가리킵니다. Angular에서 ngModel은 주로 폼 컨트롤과 함께 사용되어 입력 값을 컴포넌트 클래스의 속성에 바인딩합니다. 따라서 todo.done은 아마도 할 일 항목이 완료되었는지 여부의 상태를 나타냅니다.이 구문은 주로 체크박스, 입력 상자 등의 양식 요소와 함께 사용됩니다. 이 경우, 할 일 항목의 done 속성을 토글하는 체크박스와 함께 사용되고 있을 것입니다. 체크박스가 선택되거나 선택 해제되면 todo.done 속성이 그에 따라 업데이트되고, 그 반대도 마찬가지입니다.
즉, 이 코드는 Angular 애플리케이션의 템플릿에 표시된 체크박스를 만들고, 이 체크박스의 상태가 변경되면 todo.done 속성을 업데이트하여 애플리케이션의 상태를 반영합니다.
<p class="grow" [ngClass]="{'line-through text-gray-400' : todo.done}">
{{todo.content}}
</p>