广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue Element前端应用开发之Vuex中的API Store View的使用
  • 223
分享到

Vue Element前端应用开发之Vuex中的API Store View的使用

2024-04-02 19:04:59 223人浏览 八月长安
摘要

目录概述1、前后端的分离和WEB api 优先路线设计2、AxiOS网络请求处理POST请求GET请求3、Vuex中的API、Store和View的使用概述 在我们开发Vue应用的时

概述

在我们开发Vue应用的时候,很多时候需要记录一些变量的内容,这些可以用来做界面状态的承载,也可以作为页面间交换数据的处理,处理这些内容可以归为Vuex的状态控制。例如我们往往前端需要访问后端数据,一般是通过封装的Web API调用获取数据,而使用Store模式来处理相关的数据或者状态的变化,而视图View主要就是界面的展示处理。本篇随笔主要介绍如何整合这三者之间的关系,实现数据的获取、处理、展示等逻辑操作。

Vuex 是一个专为 vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。关于Vuex的相关State、Getter、Mutation、Action、Module之间的差异和联系,详细可以参考下:https://vuex.vuejs.org/zh/

1、前后端的分离和Web API 优先路线设计

Web API 是一种应用接口框架,它能够构建Http服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架,asp.net Web API 是一种用于在 .net Framework/ .net core 上构建 RESTful 应用程序的理想平台。在目前发达的应用场景下,我们往往需要接入winform客户端、APP程序、网站程序、以及目前热火朝天的微信应用等,这些数据应该可以由同一个服务提供,这个就是我们所需要构建的Web API平台。由于Web API层作为一个公共的接口层,我们就很好保证了各个界面应用层的数据一致性。

由于倾向于前后端的完全分离,我们后端就可以完全由Web API统一构建支持,可以采用.net framework或者.Net Core构建的统一接口平台,可以简单由Asp.net 做的Web API接口平台,也可以基于abp-aspnetboilerplate( ABP框架随笔介绍)框架基础上构建的Web API平台。

这样我们就可以基于这些API接口构建前端多项应用,如包括web前端、WinfORM前端、以及对接各种APP等应用。

引入了前后端分离的VUE + Element 的开发方式,那么前后端的边界则非常清晰,前端可以在通过网络获取对应的JSON就可以构建前端的应用了。

在前端处理中,主要就是利用Vuex模式中的Store对象里实现对Action和Mutation的请求处理,获取数据后,实现对State状态中的数据进行更新。如果仅仅是当前页面的数据处理,甚至可以不需要存储State信息,直接获取到返回的数据,直接更新到界面视图上即可。

在开发前期,我们甚至可以不需要和后端发生任何关系,通过Mock数据代替从Web API上请求数据,只要Mock的数据结构和Web API接口返回的JSON一致,我们就可以在后期实现快速的对接,而不影响现有的代码处理方式。

2、Axios网络请求处理

在我们进一步处理前,我们需要知道Vuex里面的一些对象概念和他们之间的关系。

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。关于Vuex的相关State、Getter、Mutation、Action、Module之间的差异和联系,详细可以参考下:https://vuex.vuejs.org/zh/

在开始发起网络请求之前,我们需要了解axios 这个东西,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范。在这里我们只需要知道它是非常强大的网络请求处理库,且得到广泛应用即可,列举几个代码案例进行了解。

POST请求


axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

GET请求


axios
  .get('http://rap2api.taobao.org/app/mock/23080/resources/search',{
      params: {
         id: 5
      }
   })
  .then(res => {
    console.log('数据是:', res);
  })
  .catch((e) => {
    console.log('获取数据失败');
  });

如果我们要跨域请求数据,在配置文件里设置代理,vue-cli3项目,需要在vue.config.js里面写配置。

可以分别设置请求拦截和响应拦截,在发出请求和响应到达then之前进行判断处理,一般的处理方式就是封装一个类如request类,然后进行对拦截器的统一处理,如在请求前增加一些用户身份信息等。


// create an axios instance
const service = axios.create({
  timeout: 5000 // request timeout
})

// request 请求拦截
service.interceptors.request.use(
  config => {

    if (store.getters.token) {
      config.headers['X-Token'] = getToken()
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

3、Vuex中的API、Store和View的使用

我们再次回到Vuex中的API、Store和View的使用介绍上。

我们来看看API的封装请求调用类的封装,如下所示,我们创建了一些操作数据的API类文件,每个API名称对应一个业务的集中处理,包括特定业务的列表请求、单个请求、增加、删除、修改等等都可以封装在一个API类里面。

我们来看看Product.js的类文件定义如下所示。

这里我用了Request和Axios的操作对比,两者很接近,因为request是对Axios的简单封装,主要就是拦截注入一些登录信息和一些响应的错误处理而已。


import request from '@/utils/request'
import axios from 'axios'

这里的Url里面,通过代理配置的处理,会把对应的iqidi替换为对应外部域名的处理,从而实现对跨域处理请求数据的获取了,我们这里只需要知道,url最终会转换为类似

http://www.iqidi.com/h5/GetProductList 这样实际的地址进行请求的即可,返回是一个JSON数据集合

由于Vue视图里面的JS处理部分,可以直接引入API进行请求数据,如下所示。


import { GetProductList } from '@/api/product'

然后我们就可以在method方法里面定义一个获取API数据的方法了。


methods: {
getlist(type) {
   GetProductList({ type: type }).then(response => {
     const { data } = response
     this.productlist = data.list
     this.listLoading = false
   })
}

这种调用是最直接的API调用,没有引入Store模块中封装的Action或者Mutation进行异步或者同步的处理。一般情况下直接使用这种方式比较简洁,因为大多数页面处理或者组件处理,不需要对数据进行全局状态的存储处理,也就是不需要进行全局Store对象的处理了。

如果我们需要在全局存储对应的信息,那么就需要引入Store模块中对API调用的封装了,包括Action或者Mutation的处理。

我们先来定义Store存储类,如下界面所示。

如果我们需要对产品列表等数据进行全局状态的存储,那么我们可以考虑创建一个对应Store目录下的模块,如product.js,来管理Action、Mutation和State等信息。


import { GetProductList, GetProductDetail } from '@/api/product'

const state = {
  productlist: [],
  productdetail: null
}
const mutations = {
  SET_PRODUCT_LIST: (state, list) => {
    state.productlist = list
  },
  SET_PRODUCT_DETAIL: (state, detail) => {
    state.productdetail = detail
  }
}

const actions = {
  // 产品列表
  getProductList({ commit }, { type }) {
    console.log(type);
    return new Promise((resolve, reject) => {
      GetProductList({ type: type }).then(response => {
        const { data } = response
        commit('SET_PRODUCT_LIST', data)
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },

  // 获取产品明细
  getProductDetail({ commit }, { id }) {
    return new Promise((resolve, reject) => {
      GetProductDetail({ id: id }).then(response => {
        const { data } = response
        commit('SET_PRODUCT_DETAIL', data)
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

我们下来看看,如果引入了Store模块的业务类,那么在界面视图中调用代码则修改为调用对应的Action或者Mutation了。


 methods: {
    getlist(type) {
      // GetProductList({ type: type }).then(response => {
      //   const { data } = response
      //   this.productlist = data.list
      //   this.listLoading = false
      // })

      this.$store.dispatch('product/getProductList', { type: type }).then(data => {
        this.productlist = data.list
        // this.loading = false
      }).catch((e) => {
        // this.loading = false
      })
    }

我们这里强调一下,一般情况下在视图模块中使用API的类调用即可,不需要累赘的每个业务模块,都创建一个Store的模块类进行相应的管理,只有在这些状态数据需要在多个页面或者组件中需要共享的时候,才考虑引入Store模块类进行细化管理。

我们刚才说到,如果需要创建对应业务模块的Store状态管理模块,那么需要创建对应的模块类,如前面说到的product.js类文件。

其中Modules目录里面的按照业务区分边界的Vuex的Store管理类了,每个对应业务创建一个单独的文件进行管理(如果需要用到的话)。

在index.js里面我们通过模块动态加载的方式,把这些类按照不同的命名空间进行加载进来,统一使用。


import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)

// https://webpack.js.org/guides/dependency-management/#requirecontext
const modulesFiles = require.context('./modules', true, /\.js$/)

// you do not need `import app from './modules/app'`
// it will auto require all vuex module from modules file
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  // set './app.js' => 'app'
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

const store = new Vuex.Store({
  modules,
  getters
})

export default store

以上就是Vue Element前端应用开发之Vuex中的API Store View的使用的详细内容,更多关于Vue的资料请关注编程网其它相关文章!

--结束END--

本文标题: Vue Element前端应用开发之Vuex中的API Store View的使用

本文链接: https://www.lsjlt.com/news/125705.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue Element前端应用开发之Vuex中的API Store View的使用
    目录概述1、前后端的分离和Web API 优先路线设计2、Axios网络请求处理POST请求GET请求3、Vuex中的API、Store和View的使用概述 在我们开发Vue应用的时...
    99+
    2022-11-12
  • Vue Element前端应用开发之前端API接口的封装
    目录1、ABP框架API接口的回顾2、基于ES6的JS业务类的封装1、ABP框架API接口的回顾 ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应...
    99+
    2022-11-12
  • Vue Element前端应用开发之echarts图表
    目录概述1、图表组件的安装使用2、各种图表的展示处理概述 基于图表的处理,我们一般往往都是利用对应第三方的图表组件,然后在这个基础上为它的数据模型提供符合要求的图表数据即可,VUE+...
    99+
    2022-11-12
  • Vue Element前端应用开发之图标的维护和使用
    目录概述1、Vue-Awesome的使用介绍2、导入Element 图标和Vue-Awesome图标概述 Vue-Awesome 是基于 Vue.js 的 SVG 图标组件,内置图标...
    99+
    2022-11-12
  • Vue Element前端应用开发之常规Element界面组件
    目录1、列表界面和其他模块展示处理2、常规界面组件的使用1)表单和表单项、单文本框2)下拉列表控件的绑定3)图片展示4)第三方扩展控件3、自定义组件的创建使用1、列表界面和其他模块展...
    99+
    2022-11-12
  • Vue Element前端应用开发之整合ABP框架的前端登录
    目录概述1、ABP开发框架的回顾2、Vue+Element整合ABP框架的前端登录处理概述 ABP框架作为后端,是一个非常不错的技术方向,但是前端再使用Asp.NET 进行开发的话,...
    99+
    2022-11-12
  • Vue Element前端应用开发之获取后端数据
    目录概述1、后端数据的获取处理2、界面展示处理概述 在前面随笔《循序渐进VUE+Element 前端应用开发之动态菜单和路由的关联处理》中介绍了在Vue + Element整合框架中...
    99+
    2022-11-12
  • Vue Element前端应用开发之开发环境的准备工作
    目录概述1、开发所需的软件环境1)VS code的安装2) 安装node开发环境3)vue脚手架的安装4)Vue DevTool Chrome插件的安装2、开发环境的配置使用概述 之...
    99+
    2022-11-12
  • Vue Element前端应用开发之树列表组件
    目录1、常规树列表控件的使用2、下拉框树列表的处理1、常规树列表控件的使用 众所周知,一般界面很多情况涉及到树列表的处理,如类型展示,如果是一层的,可以用下拉列表代替,如果是多个层级...
    99+
    2022-11-12
  • Vue Element前端应用开发之菜单资源管理
    目录1、菜单资源及管理界面介绍2、菜单和路由的结合管理1、菜单资源及管理界面介绍 前面介绍过,权限管理一般都会涉及到用户、组织机构、角色,以及权限功能等方面的内容,ABP框架的基础内...
    99+
    2022-11-12
  • Vue Element前端应用开发之表格列表展示
    1、列表查询界面效果 在介绍任何代码处理逻辑之前,我们先来做一个感官的认识,贴上一个效果图,在逐一介绍其中处理的步骤和注意事项。 常规的列表展示界面,一般分为几个区域,一个是查询区...
    99+
    2022-11-12
  • Vue Element前端应用开发之常规的JS处理函数
    目录1、常规集合的filter、map、reduce处理方法2、递归处理3、forEach遍历集合处理4、Object.assign赋值方法5、slice() 方法1、常规集合的fi...
    99+
    2022-11-12
  • Vue Element前端应用开发之用户管理模块的处理
    目录1、权限管理模块的设计2、用户管理界面功能1、权限管理模块的设计 我们知道,权限管理一般都会涉及到用户、组织机构、角色,以及权限功能等方面的内容,ABP框架的基础内容也是涉及到这...
    99+
    2022-11-12
  • Vue Element前端应用开发之界面语言国际化
    目录概述1、main入口函数支持2、界面处理实现概述 VUE+Element 前端应用实现国际化的处理还是非常方便的,一般在Main.js函数里面引入语言文件,然后在界面上进行一定的...
    99+
    2022-11-12
  • Vue Element前端应用开发之根据ABP后端接口实现前端展示
    目录概述1、ABP接口和前端对接处理2、ABP接口信息和前端界面处理概述 ABP(ASP.NET Boilerplate)框架主要是基于.net core 进行的后端Web API的...
    99+
    2022-11-12
  • Vue Element前端应用开发之组织机构和角色管理
    目录1、组织机构管理模块界面2、角色管理界面3、界面模块化的处理1、组织机构管理模块界面 组织机构管理模块界面如下所示,包括组织机构的成员管理和角色管理,在ABP基础领域里面,组织机...
    99+
    2022-11-12
  • Vue Element前端应用开发之动态菜单和路由的关联处理
    目录概述1、菜单和路由的处理过程2、菜单和路由列表3、登录的过程处理概述 在我开发的很多系统里面,包括Winform混合框架、Bootstrap开发框架等系列产品中,我都倾向于动态配...
    99+
    2022-11-12
  • Vue Element前端应用开发之功能点管理及权限控制
    目录概述1、权限功能点管理2、VUE+Element 前端权限控制概述 本篇随笔介绍功能点管理及权限控制,功能点是作为一个业务对象数据进行管理,在角色范畴上进行分配,而在界面元素控制...
    99+
    2022-11-12
  • Java前端开发之HttpServletRequest的使用
    目录接口详解搭设基本测试环境取回 keys取回 values请求域与应用域应用域对象请求域对象跳转与转发转发一次请求转发要求转发区别request 常见方法设置字符集几种常见属性获取...
    99+
    2023-01-05
    Java HttpServletRequest用法 Java HttpServletRequest的使用
  • 前端开发指南之vue-grid-layout的使用实例
    目录前言效果图一、vue中简单案例1、安装组件 NPM2、vue文件二、vue3使用(vue文件)1、需要导入vue3支持的该版本插件2、在mian.js里引入:三、在IE上无法打开...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作