Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
NotificationsYou must be signed in to change notification settings

Curso-VUE/4-vue-crud-todos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

  1. Crear y levantar un servidor fake con json-server
  2. Instalación de dependencias
  3. Explicación del proyecto y el router de vue
  4. Desarrollar plugins para utilizar las dependencias instaladas
  5. Iniciar módulo TODOS, definir estado, getters y mutaciones
  6. Consumir la API utilziando vue-axios a través de acciones
  7. Vistas, rutas y modificar el componente APP con la nueva navecación

1. Crear y levantar un servidor fake con json-server

El servicio json-server permite crear una api fake a la que podamos hacer peticiones.

Creamos una archivojson-server/db.json con el siguiente contenido:

{"todos": []}

Levantamos el servidor con el comando

json-server --watch db.json

2. Instalación de dependencias

Para este proyecto utilizaremos los siguientes plugins/librarías:

Las instalamos mediante el siguiente comando:

npm i axios vue-axios bootstrap-vue vuelidate

3. Explicación del proyecto y el router de vue.

Al inticar en Vue UI que vamos a utilizar el router de vue, se ha generado una carpetaviews que incluirá las distintas páginas de la aplicación y un archivorouter.js.

El archivorouter incluye las distintas rutas que va a tener la aplicación y cada ruta apunta a una de las páginas deviews.

El router permite cargar las rutas de forma estática:

importHomefrom'../views/Home.vue'constroutes=[{path:'/',name:'Home',component:Home}]

O de forma dinámica:

constroutes=[{path:'/about',name:'About',component:()=>import(/* webpackChunkName: "about" */'../views/About.vue')}]

Eliminamos el componente HelloWorld y todas sus referencias.


4. Desarrollar plugins para utilizar las dependencias instaladas

En el componente principalApp.vue podemos ver en el template que aparece la configuración para la barra de navecacion (router-link) y la etiqueta que carga las vistas (router-view).

<template><divid="app"><divid="nav"><router-linkto="/">Home</router-link> |<router-linkto="/about">About</router-link></div><router-view/></div></template>

Creamos una carpetasrc/plugins con los siguientes archivos:

  • vue-axios.js
importVuefrom'vue';importaxiosfrom'axios';importVueAxiosfrom'vue-axios';constbaseURL='http://localhost:3000';axios.defaults.baseURL=baseURL;Vue.use(VueAxios,axios);
  • vuelidate.js
importVuefrom'vue';importVuelidatefrom'vuelidate';Vue.use(Vuelidate);
  • bootstrap-vue.js
importVuefrom'vue'import{BootstrapVue}from'bootstrap-vue'import'bootstrap/dist/css/bootstrap.css'import'bootstrap-vue/dist/bootstrap-vue.css'Vue.use(BootstrapVue)
  • index.js
require('./bootstrap-vue');require('./vue-axios');require('./vuelidate');

5. Iniciar módulo TODOS, definir estado, getters y mutaciones

Creamos el directoriosrc/modules y en su interior los archivos en donde configuraremos state, actions, mutations y getters. Incluimos unindex.js para importar estos archivos:

importstatefrom'./state';import*asmutationsfrom'./mutations';import*asactionsfrom'./actions';import*asgettersfrom'./getters';exportdefault{namespaced:true,  state,  mutations,  actions,  getters}

State

Establecemos el estado que tendrá este módulo:

exportdefault{todos:[],selectedTodo:null,error:false,errorMessage:''}

Getters

Utilizaremos los getters para obtener listas de tareas filtradas por su estado.

exportfunctionpending(state){returnstate.todos.filter(todo=>!todo.done);}exportfunctiondone(state){returnstate.todos.filter(todo=>todo.done);}

Mutations

Definimos las funciones que alterarán los datos del estado:

exportfunctionsetTodos(state,todos){state.todos=todos;}exportfunctionsetTodo(state,todo){state.selectedTodo=todo;}exportfunctionupdateTodoStatus(state,payload){consttodo=state.todos.find(t=>t.id===payload.id);if(todo){todo.done=!todo.done;}}exportfunctiontodosError(state,payload){state.error=true;state.errorMessage=payload;state.todos=[];}

6. Consumir la API utilziando vue-axios a través de acciones

En el archivosrc/todos/actions.js las distintas llamadas asíncronas que realizará la aplicación:

  • Obtener la lista de tareas:
importVuefrom'vue';exportasyncfunctionfetchTodos({commit}){try{const{ data}=awaitVue.axios({url:'/todos'})commit('todos/setTodos',data,{root:true})}catch(error){commit('todos/todosError',error.message,{root:true})}finally{console.log('La petición para obtener los datos ha finalizado.')}}
  • Crear una tarea:
exportasyncfunctionaddTodo({commit},todo){try{awaitVue.axios({method:'POST',url:'/todos',data:{id:Date.now(),text:todo.text,done:false}})}catch(error){commit('todos/todosError',error.message,{root:true})}finally{console.log('La petición para crear un todo ha finalizado.')}}
  • Actualizar una tarea:
exportasyncfunctionupdateTodo({commit},todo){try{awaitVue.axios({method:'PUT',url:`/todos/${todo.id}`,data:{id:todo.id,text:todo.text,done:todo.done}})}catch(error){commit('todos/todosError',error.message,{root:true})}finally{console.log('La petición para crear un todo ha finalizado.')}}
  • Actualizar el estado de una tarea:
exportasyncfunctionupdateTodoStatus({commit},todo){try{awaitVue.axios({method:'PUT',url:`/todos/${todo.id}`,data:{id:todo.id,text:todo.text,done:!todo.done}})}catch(error){commit('todos/todosError',error.message,{root:true})}finally{console.log('La petición para actualizar el estado de un todo ha finalizado.')}}
  • Eliminar una tarea:
exportasyncfunctionremoveTodo({commit, dispatch},id){try{awaitVue.axios({method:'DELETE',url:`/todos/${id}`})dispatch('fetchTodos')}catch(error){commit('todos/todosError',error.message,{root:true})}finally{console.log('La petición para actualizar el estado de un todo ha finalizado.')}}

Dispatch permite lanzar otra acción, en este caso para volver a obtener la lista de tareas una vez eliminada una de ellas.

Por último sólo nos falta cargar el módulo en elstore, que quedaría de la siguiente manera:

importVuefrom'vue'importVuexfrom'vuex'importtodosfrom'../modules/todos'Vue.use(Vuex)exportdefaultnewVuex.Store({modules:{    todos}})

7. Vistas, rutas y modificar el componente APP con la nueva navecación

Eliminamos los archivos por defecto de las vistas y creamos tres vistas nuevas:

  • Todos.vue
  • TodoCreate.vue
  • TodoUpdate.vue

Por el momento, simplemente creamos los archivos con un template que nos permita visualizar el cambio de una página a otra.

Modificamos el router para incluir las rutas a las nuevas páginas:

constroutes=[{path:'/',name:'Home',redirect:'/todos'},{path:'/todos',name:'todos',component:()=>import(/* webpackChunkName: "todos" */'../views/Todos.vue')},{path:'/todos/create',name:'todos-create',component:()=>import(/* webpackChunkName: "todos-create" */'../views/TodoCreate.vue')},{path:'/todos/:id/update',name:'todos-update',component:()=>import(/* webpackChunkName: "todos-update" */'../views/TodoUpdate.vue')}]

La ruta de update recibe un parámetro id.

Modificamos elApp.vue para cargar las nuevas rutas, utilizando bootstrap-vue.

<template><b-container><b-navtabs><b-nav-itemexactto="todos">Listado de tareas</b-nav-item><b-nav-itemexactto="todos/create">Formulario de alta de tareas</b-nav-item></b-nav></b-container></template>

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp