Skip to content

Commit 6870cae

Browse files
committed
69
1 parent 5144ea8 commit 6870cae

File tree

2 files changed

+64
-20
lines changed

2 files changed

+64
-20
lines changed

src/components/Input.vue

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<template>
2+
<div class="form-group">
3+
<label>{{ label }}</label>
4+
<input
5+
:value="subject"
6+
@input="onInput"
7+
type="text"
8+
class="form-control"
9+
>
10+
<div
11+
v-if="error"
12+
class="text-red"
13+
>
14+
{{ error }}
15+
</div>
16+
</div>
17+
</template>
18+
19+
<script>
20+
export default {
21+
props: {
22+
label: {
23+
type: String,
24+
required: true
25+
},
26+
error: {
27+
type: String,
28+
required: true
29+
},
30+
subject: {
31+
type: String,
32+
required: true
33+
}
34+
},
35+
setup(props, { emit }) {
36+
const onInput = (e) => {
37+
emit('update:subject', e.target.value);
38+
};
39+
40+
return {
41+
onInput
42+
}
43+
}
44+
}
45+
</script>
46+
47+
<style scoped>
48+
.text-red {
49+
color: red;
50+
}
51+
</style>

src/components/TodoForm.vue

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,11 @@
88
>
99
<div class="row">
1010
<div class="col-6">
11-
<div class="form-group">
12-
<label>Subject</label>
13-
<input
14-
v-model="todo.subject"
15-
type="text"
16-
class="form-control"
17-
>
18-
<div
19-
v-if="subjectError"
20-
class="text-red"
21-
>
22-
{{subjectError}}
23-
</div>
24-
</div>
11+
<Input
12+
label="Subject"
13+
v-model:subject="todo.subject"
14+
:error="subjectError"
15+
/>
2516
</div>
2617
<div v-if="editing" class="col-6">
2718
<div class="form-group">
@@ -72,14 +63,16 @@
7263
<script>
7364
import { useRoute, useRouter } from 'vue-router';
7465
import axios from 'axios';
75-
import { ref, computed } from 'vue';
66+
import { ref, computed, onUpdated } from 'vue';
7667
import _ from 'lodash';
7768
import Toast from '@/components/Toast.vue';
7869
import { useToast } from '@/composables/toast';
70+
import Input from '@/components/Input.vue';
7971
8072
export default {
8173
components: {
82-
Toast
74+
Toast,
75+
Input
8376
},
8477
props: {
8578
editing: {
@@ -95,6 +88,9 @@ export default {
9588
completed: false,
9689
body: ''
9790
});
91+
onUpdated(() => {
92+
console.log(todo.value.subject)
93+
})
9894
const subjectError = ref('');
9995
const originalTodo = ref(null);
10096
const loading = ref(false);
@@ -105,7 +101,7 @@ export default {
105101
triggerToast
106102
} = useToast();
107103
108-
const todoId = route.params.id
104+
const todoId = route.params.id
109105
110106
const getTodo = async () => {
111107
loading.value = true;
@@ -195,9 +191,6 @@ export default {
195191
</script>
196192

197193
<style scoped>
198-
.text-red {
199-
color: red;
200-
}
201194
202195
.fade-enter-active,
203196
.fade-leave-active {

0 commit comments

Comments
 (0)