To Do 생성
가장 중요한 핵심 기능인 To Do를 생성하는 기능
Text Form
<div class="flex-initial mt-2" v-if="categoryStatus !== 'important' && patternArr.indexOf(this.categoryStatus) < 0 && currentState === 0">
<input
type="text"
v-model="title"
@keyup.enter="submit"
placeholder="ToDoを書いてください。"
class="mb-4 border-4 border-pink-400 w-full p-2 text-black"
autofocus
>
</div>
사용자의 Text를 받아서, To Do를 제작해야하니 Text Form을 이용한다.
input태그안에 사용된 Vue 문법 정리
v-model
v-model은 input태그에서 사용하며, 실시간으로 양방향 바인딩이 가능하도록 해준다.
이게 무슨말이냐면, data()에서는 template에서 사용될 변수를 선언해주는 부분인데, 여기서 title이라는 변수를 v-model로 바인딩하게 되면, text form에서 글을 작성하는 동시에 그 내용을 title에 넣어주는 것이다.
text form에 "안녕"이라고 적으면, title은 ''로 초기화되어있지만 양방향 바인딩으로 "안녕"이라는 값이 title에 들어간다.
data() {
return {
title: '', // ToDo 생성할 때, text form 값과 v-model로 바인딩
}
},
@keyup.enter
Vue에는 @keyup을 이용해서 키보드를 눌렀다 땟을 때, 어떠한 동작을 실행시킬 수 있다.
".enter"를 붙힘으로써 다른 키에는 동작안하고 enter키를 눌렀다가 땟을 때만 특정 작업을 하도록 하는 것
@keyup.enter="submit"
그러므로 위의 코드는 enter키를 눌럿다 땠을 때, submit이라는 함수를 실행시켜라! 라는 말과 같다.
DB에 저장
위의 @keyup.enter를 설명했을 때, submit이라는 함수를 실행한다 했는데 submit 함수는?
methods: {
//text form에서 @keyup.enter를 통해서 enter를 눌렀다가 땟을 경우 실행되는 함수
submit() {
//if문을 쓴이유는 text가 있을 때만
if(this.title === '') {
alert("글을 입력해야지!!");
} else {
axios.post('api/todo/title', {
title: this.title,
}).then(res => {
this.getResult(lastPage, this.categoryStatus);
this.ToDoList.push(res.data.ToDoList);
});
}
//text를 저장하고 나서는 text창 초기화
this.title='';
},
}
Vue에서 함수는 methods: {] 안에 작성되게 되는데, 위의 코드를 설명하자면
우선 if문을 통해서 title값이 있는지 없는지를 확인합니다.
글을 적어야지 To Do를 추가할 수 있으니, 글이 없는 상태에서 엔터를 누르면 alert를 이용해서 경고창이 나오도록 함
axios를 이용해서 JSON으로 api와 통신을 할 수 있습니다.
axios.post('api/todo/title', {
title: this.title,
}).then(res => {
this.ToDoList.push(res.data.ToDoList);
});
axios부분만 따로 설명을 하자면, 지금 우리는 값을 DB에 저장을 할려고 하는거기 때문에 post로
api/todo/title로 요청을 하는데, 여기서 "api/todo/title"가 어디냐? 이건 Laravel 프로젝트 api.php 에서 볼 수 있다.
route/api.php
Route::post('/todo/title', [ToDoListController::class, 'store']);
해당 URL로 post요청이 왔을 경우에, ToDoListController의 store이라는 함수를 실행시켜라!! 라는 의미다.
ToDoListController.php
public function store() {
$validated = request()->validate([
'title' => 'required',
]);
$ToDoList = ToDoList::create($validated);
return response()->json([
'ToDoList' => $ToDoList,
], 200);
}
laravel의 validate를 통해서 request로 받아온 내용들을 검증을 합니다.
위의 axios 부분을 보면, "title : this.title"을 파라미터로써 같이 전송을 한 것인데
이 title값을 제대로 받아왔는지를 validate로 확인을 하고, 문제 없으면 DB에 저장을 합니다.
그리고, 정상적으로 성공을 하게 되면 response() -> json()을 이용해서 호출한 곳으로 지금 새로 저장한 To Do의 정보
를 JSON의 형태로 보내게 됩니다.
axios.post('api/todo/title', {
title: this.title,
}).then(res => {
this.ToDoList.push(res.data.ToDoList);
});
무사히 통신이 끝났으면, then 부분의 코드가 실행이 되는데, res가 방금 JSON형식으로 보낸 데이터를 받아온 것이고
ToDoList라는 변수에 push로 추가하는 것을 볼 수 있다.
그러면 무사히 데이터를 저장하고, 저장한 내용을 다시 받아와서 Vue에 변수에 새롭게 추가를 해준다.
그럼 template에서는 새롭게 추가된 내용이 바로 view화면을 통해 보일 수 있도록 하는 것
다음에는 가져온 데이터를 어떻게 View에 보이도록 하는지를 적어보겠습니다.
'IT 공부 > Laravel' 카테고리의 다른 글
[ Laravel + Vue.js ] 나만의 To Do List 만들기 - D-Day계산 / 중요 관리 (0) | 2021.08.30 |
---|---|
[ Laravel + Vue.js ] 나만의 To Do List 만들기 - DB에서 data 받아오기 (0) | 2021.08.29 |
[Laravel + Vue.js ] 나만의 To Do List만들기 - Vue 설치 및 초기설정 (0) | 2021.08.29 |
[Laravel + Vue.js] 나만의 To Do List 만들기 (0) | 2021.08.29 |
[ Laravel ] 프로젝트 Jetstream 사용하기 (0) | 2021.08.08 |