不多说啥了,生活中都是各种阵痛与惊喜。最近在学习vue框架,刚写完一个小型的后台管理系统(https://github.com/michaelzhengzm/info-manager-systerm_ol),在这里做一个阶段性的小结:

一、构建项目与安装依赖

  构建项目采用vue-cli脚手架搭建,npm、cnpm、vue-cli这些知识的基础,网上一大片一大片的,就不过多的描述了。难理解的是里面的配置文件,初学的时候确实费了很多劲,先不用去管太多的配置文件,这些主要是以后上线打包的一些配置问题。这里主要关注一下如何安装依赖,依赖就是一个项目运行需要的模块,比如使用axios来获取数据,就需要安装相应模块。项目依赖在根目录下的package.json文件中,如下是我项目使用的依赖包:


"dependencies": {
"axios": "^0.18.0",
"echarts": "^4.2.1",
"element-ui": "^2.7.2",
"mockjs": "^1.0.1-beta3",
"vue": "^2.5.2",
"vue-awesome": "^3.5.1",
"vue-particles": "^1.0.9",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.1"
},

  在最开始项目构建后,有部分依赖包,如vue、vue-router是项目初始化后就存在的,其他的如果做项目时确定需要用到的依赖包,比如获取数据需要的axios、UI设计框架element-ui这样的可以直接在该处写上名字和版本,其中^表示匹配该符号后面第一个数字开头的版本的最新版;这里写成后在终端中npm install或者npm i可以安装这些依赖,然后在根目录下会出现node_modules文件夹,这个文件夹都是依赖包文件,不需要我们修改任何东西,当然也不要删除,如果不小心删除了,再次npm i就可以了。

  如果其他的一些模块不能确定需要使用的,在你做网页时想到或者网上搜索到需要使用,再考虑单独引入,引入的时候在终端中使用npm install **(模块名字)的方法进行安装,安装后的模块名称会自动出现在package.json文件的dependencies中。

二、关于数据源

  项目中的数据从哪里来呢,这是我最开始最常纠结的问题。其实对于前端来说,项目的数据应该都来自于配套的后端程序,前后端分离后,后端处理好从项目业主提供的原始数据,提供给前端对外的数据API接口,这个接口是双方约定好的,比如一些返回状态,错误码,一些格式或者名称等。但是开发的时候实际是同时开发的,也就是前端在开发过程中要使用的数据需要自己先根据需求进行模拟,看其实际在网页的表现是否满足需求。当然,另外也有一些网络API接口,这相当于别人处理好的数据,你根据其使用规则来使用。

  数据的获取在vue里有很多种方法,比如vue-resource的this.$http.get/post、jQuery的$.ajax、axios的this.$axios.get/post、fetch方法等。这些每一种方法都是可行的,需要掌握的基础还是post/get请求方法,只是我自己对这块都停留在会简单的使用上面,这里就不深入探讨这个了,这里只是说一些数据的来源。

  1.vue脚手架项目可以使用mock数据,mock.js是随机生成模拟数据,官网地址http://mockjs.com/。我在项目里只使用了少量的mock数据,如下:

   Mock.mock(/login/, {
data: {
userId: "@integer(1,10)",
"nickname|1": ["Amy", "Michael", "Jack", "John", "Albert","Norton"],
},
});

  这里要在main.js中导入mock.js,上述代码在数据请求时访问“login”地址,对外提供1个nickname,在后面的数组中随机生成。如果需要其他随机生成的内容,另外自己去模拟,请参考mock.js官网http://mockjs.com/。

  2.直接在组件的data中定义数据,这是最简单的方式了,如下:

  data() {
return {
introduction: [
"登录页有粒子动态效果,采用VueParticles,各项参数设置可参看https://www.jianshu.com/p/53199b842d25;",
"登录后的昵称是用mock数据做的,mock.js需要在main.js中导入;",
"左侧导航栏是根据element-ui的导航写的,直接可用index跳转,顶部导航为ui的面包屑导航;",
"天气预报采用的echarts,需要导入使用,样式应该可以更美观,此处只做了基础的改变,数据为网上找的一个接口,部分城市可能无数据;",
"文本编辑vue-quill-editor需要在main.js中导入,仅在编辑页做了变化示例,后期可考虑传值到父组件,可插入图片;",
"表格操作是根据某后台管理系统的网页仿写的,有增删改查等功能,选择管理员和一般用户按钮可以看到不同的菜单,使用watch监测数据变化;",
"新闻资讯也是网上找的数据接口,设置自动获取时间改变接口的时间参数每天自动刷新,开发时设置proxyTable代理进行跨域;",
]
};
},

  主要注意数据要用return返回,不使用return包裹的数据会在项目的全局可见,会造成变量污染;使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件,就类似于一个函数里的每个不同的实例这个概念。

  3.使用vuex数据管理仓库,这个一般在大型的项目数据比较复杂的时候使用,我GitHub上面的那个项目没使用,但是在最开始学习的时候也在一个小页面中使用过,学习地址https://vuex.vuejs.org/zh/。主要是State、Getter、Action、Mutations、Module这5个大块,也有其辅助函数map开头的几个,自己学习的不算很深入,还需要加强学习。

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const state = {
person: [{
name: '张三',
age: '23',
sex: '男',
likes: '篮球',
introuce: '',
},
{
name: '李四',
age: '25',
sex: '男',
likes: '游泳',
introuce: ''
},
{
name: '王五',
age: '24',
sex: '男',
likes: '乒乓',
introuce: ''
},
{
name: '马六',
age: '22',
sex: '男',
likes: '排球',
introuce: ''
},
{
name: '周星星',
age: '27',
sex: '男',
likes: '羽毛球',
introuce: ''
},
{
name: '李丽',
age: '21',
sex: '女',
likes: '看书',
introuce: ''
},
{
name: '付兰',
age: '21',
sex: '女',
likes: '看电影、游泳',
introuce: ''
},
]
}
const getters = {
showList(state){
for (let i = 0; i < state.person.length; i++) {
state.person[i].introduce = '我叫'+state.person[i].name+',我今年'+state.person[i].age+'岁了,我的爱好是'+state.person[i].likes
}
return state.person
}
}; const mutations = {
add(state,data){
state.person.push(data)
},
del(state,i){
state.person.splice(i,1)
},
edit(state,{index,data}) {
state.person.splice(index,1,data)
},
}; const actions = {
addPerson({commit},data){
commit('add',data)
},
delPerson({commit},data){
commit('del',data)
},
editPerson({commit},data){
commit('edit',data)
},
}; export default new Vuex.Store({
state,
getters,
mutations,
actions
});

  上述代码是一个很简单的状态管理,单独定义一个仓库store,State里定义数据,Getter获取State数据相当于计算属性,Mutations方法函数、Action执行Mutations。最后在组件里可以使用这个store里的数据,使用方法this.$store.dispatch("addPerson", data),主要是dispatch方法。

  这种方法在上线时如果数据复杂也建议使用这种方法,将State里数据的通过相关axios等方法获取。

  4.网络API数据,网络上有很多开源的API,也有一些收费的API,这些API一般以json或者jsonp的格式存在。收费的主要需要注意一般都有跨域问题存在。

  开发时的跨域在根目录下的config文件夹下的index.js中配置,找到proxyTable配置,在module.exports的dev里面

    proxyTable: {
'/api': { //代理地址
target: 'http://api01.idataapi.cn:8000/article', //需要代理的地址
changeOrigin: true, //是否跨域
secure: false,
pathRewrite: {
'^/api': '' //本身的接口地址没有 '/api' 这种通用前缀,所以要rewrite,如果本身有则去掉
},
}
},

  这样在获取数据时api就是代表了http://api01.idataapi.cn:8000/article这个网站,然后通过拼接得到正确的数据接口。this.$axios.get('api’ + url),这个url是接口后一部分的网址,注意与api之间的'/',如果前面有后面则不要加,如果没有后面开始就要加。这样开发状态下代理跨域就完成了。

  线上的跨域其实如果是有后端系统的项目,一般有后端服务器端设置,上线后其实都在同一域,不存在跨域,如果需要跨域,一般由后端来解决也方便些。但是如果实在没办法,那网上找了也有很多其他方法,我主要采用的是nginx反向代理的方法。将前端代码打包后放到nginx服务器,在nginx配置里设置代理即可。如下:

        location /api/ {
rewrite ^/b/(.*)$ /$1 break;
add_header 'Access-Control-Allow-Origin' '*';
proxy_pass http://api01.idataapi.cn:8000/article/;
}

  这个配置在nginx安装后的目录下的config文件夹nginx.conf文件里下,在 server里添加上述代码,即表示了用api代理http://api01.idataapi.cn:8000/article/地址。

  以上这些内容,真的是说起来可以算知道,但是自己遇到问题的时候真的好困难,一个自学者的悲哀吧,就算网上有人回复了,其实有时候也看不到你到底哪里出错了,还是要靠自己。

Vue学习小结(一)安装依赖与数据来源的更多相关文章

  1. vue 使用npm install安装依赖失败 【问题分析与解决】

    1 进入项目根目录,先通过 npm install 命令安装项目所需依赖,再通过 vue ui 命令打开 Vue Cli 提供的图形化界面,选择项目所在文件夹将项目导入. 出现问题 npm insta ...

  2. vue项目 npm install 安装依赖 特别慢 解决办法

    使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,笔者20M带宽,应该不是我网络的原因,后来在网上找了好久才找到一 ...

  3. Vue学习小结(二)

    接上一批,小结(二). 三.导航内容(含左侧导航及顶部面包屑导航) 其实导航条主要根据element-ui的教程进行编写,官网:http://element-ui.cn/#/zh-CN/compone ...

  4. Vue学习小结

    ES6 let完全可以取代var const声明一个只读的常量 箭头函数:可以绑定this对象,大大减少了显式绑定this对象的写法(call.apply.bind) 函数绑定(function bi ...

  5. 39.VUE学习--组件,子组件中data数据的使用,x-template模板的使用,改变for循环里的某条数据里的值

    多处引用相同组件时,操作data不会相互影响 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  6. vue学习笔记——脚手架安装

    项目启动:npm run build 脚手架 vue cli vue cli --2 安装命令 #全局安装 npm install --global vue-cli #卸载vue-cli  npm u ...

  7. Vue学习笔记-django-cors-headers安装解决跨域问题

    一  使用环境: windows 7 64位操作系统 二  jango-cors-headers安装解决跨域问题(后端解决方案) 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的 ...

  8. Vue学习笔记-VSCode安装与配置

    一  使用环境: windows 7 64位操作系统 二  VSCode安装与配置  1.下载: https://code.visualstudio.com 直接点击即可. 2. 点击按装程序,默认安 ...

  9. vue学习1

    1.<div id="app">{{message}}<input v-model="message"></div>new ...

随机推荐

  1. Redis模块化基本介绍

    概要 Redis Modules System基本概念 基本应用 参考资料 1. Redis Modules System基本概念 Redis Modules System是4.0出现一大改动点,使得 ...

  2. manifold tangent classifier

    The Manifold Tangent Classifier (MTC) Putting it all together, here is the high level summary of how ...

  3. Pygame常用方法

    '''import pygame# 初始化pygame库,让计算机硬件准备pygame.init()# ----------窗口相关操作-----------# 创建窗口window = pygame ...

  4. 语音识别中的CTC算法的基本原理解释

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...

  5. 【转】Sentry--错误日志收集

    简介 Sentry是一个实时事件日志记录和汇集的日志平台,其专注于错误监控,以及提取一切事后处理所需的信息.他基于Django开发,目的在于帮助开发人员从散落在多个不同服务器上的日志文件里提取发掘异常 ...

  6. 微信小程序开发资源汇总 💯

    目录 官方文档 工具 插件 讨论 教程 视频教程 文章 代码 轮子 置顶 WePY:组件化的小程序开发框架 

  7. R 网络图 nodes,edges属性计算

    前面提到了用R画网络图,免不了要对网络图nodes和edges的特征做一些统计.分享下我的代码: ########## nodes edges的统计########### # ####nodes的度有 ...

  8. Git的一些操作

    前言 记录一些经常需要用到的命令. 私钥.公钥的生成(默认在C盘用户文件下生成) ssh-keygen -t rsa //rsa加密 拉取远程分支并与本地分支合并 git pull [url] 上述效 ...

  9. capwap学习笔记——初识capwap(五)(转)

    3. CAPWAP Binding for IEEE 802.11 ¢ CAPWAP协议本身并不包括任何指定的无线技术.它依靠绑定协议来扩展对特定无线技术的支持. ¢ RFC5416就是用来扩展CAP ...

  10. 二十一、Hadoop学记笔记————kafka的初识

    这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...