vue系列——数据请求

数据请求有两个问题,一个是工具选择,一个是代码组织问题

(一)工具选择

  我看过一些别人写的项目,有直接用jquery提供的ajax接口,有自己封装了一个fetch接口,当然更多的是选择vue的第三方数据请求模块,说的最多的是vue-resource和axios;axios是目前最推荐的,但是我最终还是暂时选择了vue-resource,原因很简单,在国内还是有很多jsonp需求的,而后者不支持,原因很简单作者不喜欢jsonp,它认为这是一种跨域的hack方式,是不好的所以也没准备支持。

  为了防止工具切换,我做了一个http的简单代理,也就是数据请求代码不直接调用第三方API,而是通过一个中间代理映射下方法,这样以后要换工具,也不至于苦逼的一个个替换接口。vue-resource的具体api直接参见它的github上的文档:https://github.com/pagekit/vue-resource/blob/develop/docs/http.md

  关于vue-resource再补充一点: get请求如果要传参,写法是比较特殊的,是第二个参数的params属性,而不是直接第二个参数,写惯了jquery的容易采坑

vue.$http.get(‘getUserInfo.php‘,{
        params:params
 })

  具体参数写法人家写的很清楚了:

(二)代码组织

数据请求代码怎么写,我这里提供一种我自己实现的方案,抛砖引玉,如果你有更好的留言给我。

  

这是我的目录,数据请求相关模块几种在server里面

1. config

这个是全局配置文件,做了两件事情:全局路径配置(当然也还可以做些其它配置,比如header),代理http返回

import Vue from ‘vue‘
import resource from ‘vue-resource‘

Vue.use(resource);
Vue.http.options.root = ‘http://web.11h5.com:4600‘

var vue = new Vue()
// vue.$http.options.emulateJSON = true;

//http代理对象
var http = {
	get:vue.$http.get.bind(vue.$http),
	post:vue.$http.post.bind(vue.$http),
	jsonp:vue.$http.jsonp.bind(vue.$http),
}

export default http

2. user-mock

这是个ajax劫持返回假数据测试的功能,参照mockjs

import Mock from ‘mockjs‘

const root = ‘http://web.11h5.com:4600/‘

var login = Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    ‘list|1-10‘: [{
        // 属性 id 是一个自增数,起始值为 1,每次增 1
        ‘id|+1‘: 1
    }]
})

if(process.env.NODE_ENV !== ‘production‘){
	Mock.mock( root + ‘api‘, login )
}

3. user

这个是具体的数据请求模块,我看到过有些项目把所有请求集中在一个文件,如果比较多实在太大,所以这里可以分开来,用户相关请求只在user里面

import http from ‘./config‘
import ‘./user-mock‘

var login = function(params){
        return http.get(‘api‘,{
        	params:params
        })
    }   

var getUserInfo = function(params){
        return vue.$http.get(‘getUserInfo.php‘,{
        	params:params
        })
    }   

export default{
	login,getUserInfo
}   

最后,我们可以在vue组件中引入user模块做数据请求,或者在vuex的action中使用:

import * as types from ‘../mutation-types‘
import httpUser from ‘../../lib/server/user‘

// initial state
const state = {
  aa:‘aa‘
}

// getters
const getters = {
  aa: state => `from getters:${state.aa}`
}

// actions
const actions = {
  login ({ commit, state }, str) {
    httpUser.login().then(response =>{
      commit(types.CHANGE_A, { str:JSON.stringify(response.body) })
    })
  }
}

// mutations
const mutations = {
  [types.CHANGE_A] (state, { str }) {
    state.aa += str
  }
}

  

时间: 2024-11-08 23:32:05

vue系列——数据请求的相关文章

vue中数据请求的三种方法

注意请求可能存在跨域问题,需要去配置好 这三种建议使用axios 1.resource Vue 要实现异步加载需要使用到 vue-resource 库. Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求. 先导入一个线上cdn的地址,当然还可以去npm安装,但个人觉得这种方便 <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></scri

vue 动态数据请求

写在前面的话: 很多时候,页面的数据是从前端向后端发起请求获取的,下面是最近用的方法: 1. axios:   详细的用法参考: axios中文说明   或者 英文的说明 注明:axios不支持jsonp(https://github.com/mzabriskie/axios/blob/master/COOKBOOK.md#jsonp),所以要用jsonp的话,请参照下边的第二种jsonp请求方式. 1)npm 安装 npm install axios --save 2)在需要用到请求的页面引入

VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property &#39;xxxx&#39; of undefined 的解决办法

正常情况下在data里面都有做了定义 在函数里面进行赋值 这时候你运行时会发现,数据可以请求到,但是会报错 TypeError: Cannot set property 'listgroup' of undefined 主要原因是: 在 then的内部不能使用Vue的实例化的this, 因为在内部 this 没有被绑定.可以看下 Stackoverflow 的解释: 解决办法: 1.用ES6箭头函数,箭头方法可以和父方法共享变量 2.在请求axios外面定义一下 var that=this 问题

Vue数据请求 axios vs fetch

Vue数据请求 数据请求在前端开发中的使用有两种形式 使用原生javascript提供的数据请求 ajax( 四部曲,一般需要我们结合Promise去封装,使用不是很便利,但是效率很高 ) fetch( 本身结合了Promise,并且已经做好了封装,可以直接使用 ) 使用格式: 使用别人封装好的第三方库目前最流行的,使用率最高的是 axios vue中我们最常使用的 vue 1.x 的版本提供了一个封装库 vue-resource , 但是到了vue 2.x版本之后,这个就弃用了vue-reso

VUE - 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property &#39;xxxx&#39; of undefined 的解决办法

created() { var that=this axios.get('http://jsonplaceholder.typicode.com/todos') .then(function (res) { // handle success // console.log(res); that.todos = res.data }) .catch(function (error) { // handle error console.log(error); }) .finally(function

从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.Vue发送Aj

mockjs模拟数据请求

一般项目的方法 <html> <head> <script> <script src="http://requirejs.org/docs/release/2.1.16/comments/require.js"></script> </script> </head> </html> <script> // 配置 Mock 路径require.config({ paths: { m

Vue的参数请求与传递

Vue不同模板之间的参数传递 页面路由带参数的跳转: 参数接收: Vue向服务器请求资源的两种方式 VUE-RESOURCE 1.Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应.也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为

vue03----生命周期、nextTick()、ref、filter、computed、vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到什么问题、踩过的坑)

### 1.vue的组件和实例都有生命周期,而且是一样的 生命周期:(组件从创建到销毁的过程) 创建 挂载 更新 销毁 组件到达某一个阶段就会自动触发某一些函数,这个函数就叫生命周期的钩子函数. 创建:组件创建的时候触发 beforeCreate created     组件刚创建的数据请求 挂载:创建完成挂载前后触发 beforeMount mounted     DOM的初始化操作 更新:数据发生改变的时候触发 beforeUpdate updated     数据的变化监听,尽量不要在这里