123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <template>
- <li :class="{ completed: todo.done, editing: editing }" class="todo">
- <div class="view">
- <input
- :checked="todo.done"
- class="toggle"
- type="checkbox"
- @change="toggleTodo( todo)"
- >
- <label @dblclick="editing = true" v-text="todo.text" />
- <button class="destroy" @click="deleteTodo( todo )" />
- </div>
- <input
- v-show="editing"
- v-focus="editing"
- :value="todo.text"
- class="edit"
- @keyup.enter="doneEdit"
- @keyup.esc="cancelEdit"
- @blur="doneEdit"
- >
- </li>
- </template>
- <script>
- export default {
- name: 'Todo',
- directives: {
- focus(el, { value }, { context }) {
- if (value) {
- context.$nextTick(() => {
- el.focus()
- })
- }
- }
- },
- props: {
- todo: {
- type: Object,
- default: function() {
- return {}
- }
- }
- },
- data() {
- return {
- editing: false
- }
- },
- methods: {
- deleteTodo(todo) {
- this.$emit('deleteTodo', todo)
- },
- editTodo({ todo, value }) {
- this.$emit('editTodo', { todo, value })
- },
- toggleTodo(todo) {
- this.$emit('toggleTodo', todo)
- },
- doneEdit(e) {
- const value = e.target.value.trim()
- const { todo } = this
- if (!value) {
- this.deleteTodo({
- todo
- })
- } else if (this.editing) {
- this.editTodo({
- todo,
- value
- })
- this.editing = false
- }
- },
- cancelEdit(e) {
- e.target.value = this.todo.text
- this.editing = false
- }
- }
- }
- </script>
|