Vue学习小结(一)安装依赖与数据来源

  不多说啥了,生活中都是各种阵痛与惊喜。最近在学习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数据,如下:

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

  这里要在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/地址。

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

原文地址:https://www.cnblogs.com/mjion/p/10774811.html

时间: 2024-10-09 14:31:46

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

vue学习小结

new 一个vue对象的时候可以设置它的属性,其中最重要的包括三个,data,methods,watch. 其中data代表vue对象的数据,method代表vue对象的方法(要执行的函数),watch设置了对象的蒋婷方法. vue对象的设置通过html指令进行关联. 重要的指令包括: 1)v-text渲染数据 2)v-if控制显示 3)v-on绑定事件 4)v-for循环渲染

vue学习 之 vuex安装及使用

1.安装  vuex npm install vuex --save 2.为什么使用vuex vue 包括  data()状态:template(视图):methods(方法).一个简单的单项数据流概念 但是当我们的应用遇到多个组件共享状态时.单项数据流 容易 破坏. 3. 使用vuex 再main.js 中注入 vuex import Vuex from 'vuex' Vue.use(Vuex) 在src 下创建文件夹store:创建store.js import Vue from 'vue'

Vue学习小结(四)

一.生命周期钩子(函数): 1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会. 2.图示: 原文地址:https://www.cnblogs.com/21-forever/p/11105864.html

Vue学习日记(三)——Vue路由管理vue-router

前言 为了给读者更好的体验,去理解vue-router和下一篇介绍vuex,决定还是来一个实战教程来带大家更加的去深入理解vue-router,在这之前,读者先自行了解和去官网下载npm和node,附:npm官网 项目构建 这里我采用vue-cli+webpack构建初始项目,在vue官网里面也有相关介绍,在这里我就手把手教大家一下吧,先通过控制台进入相关的文件目录下,然后输入 # 后面是注释 # $表示当前文件目录 # 全局安装 vue-cli $ npm install --global v

Vue 学习记录&lt;1&gt;

1.环境搭建:(前提node.js搭建) # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 安装依赖 $ cd my-project $ npm install $ npm run dev 2.

Vue学习系列---安装

一.前言 学任何东西都是有理由的,目前主要有Angular,React,Vue这三个前端MVVM框架.我选择vue原因很简单,“”入门简单“”,是的只是这个理由.相较于其他2个框架,vue的文档真的是太亲民的,入门曲线没有那么陡,对于我这种小菜鸟来说,是入门首选.等vue熟悉后,相信再看别的前端MVVM框架也是一通百通的效果. 目前流行的2套基于vue.js的UI框架element-ui(http://element-cn.eleme.io/#/zh-CN/component/installat

vue学习之路一:安装vue-element-admin项目

今天看到一个vue网站,觉得很好,立马又有学习vue的冲动了,话不多说,直接贴项目网址: https://github.com/PanJiaChen/vue-element-admin/blob/master/README.zh-CN.md 根据文档,第一步就是安装项目啦! # 克隆项目 git clone https://github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖 npm in

Vue学习之vue-cli脚手架下载安装及配置

Vue学习之vue-cli脚手架下载安装及配置:https://www.cnblogs.com/clschao/articles/10650862.html 1. 先下载node.js,下载地址:https://nodejs.org/en/download/ 找个目录保存,解压下载的文件,然后配置环境变量,将下面的路径配置到环境变量中. 由于 Node.js 中默认安装了 npm,所以不用额外配置就能在全局命令中使用 npm命令,如果要使用自己安装的 npm 时,如 cnpm ,那么就需要像上面

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版