Vue-CLI与Vuex使用方法实例分析


Posted in Javascript onJanuary 06, 2020

本文实例讲述了Vue-CLI与Vuex使用方法。分享给大家供大家参考,具体如下:

1、通过Vue-CLI创建项目

Vue-CLI是Vue用于创建Vue项目的脚手架工具,它可以快速帮你创建一个Vue项目的文件目录,使Vue开发更加便捷、标准化。

1、全局安装脚手架:npm install --global vue-cli,安装成功后可以通过vue -V查看版本号

2、初始化项目文件夹:vue init webpack 项目名,之后会出现命令行交互,根据提示设置项目名称、描述以及是否安装一些依赖包。

3、安装依赖包:在vue项目中会用到很多第三方依赖,如果是新项目或者添加了新的依赖,运行之前就需要安装依赖:npm install,有时在启动项目时会报错Error: Cannot find module 'XXX',这就是由于项目缺少依赖导致。如果npm install后仍报错,建议把依赖的文件夹node_modules删除,再重新安装依赖试一试。

4、启动项目:npm run dev,自动会在浏览器8080端口弹出项目页面。vue默认端口8080,如果需要修改,在config/index.js文件内修改port的值

5、项目打包:npm run build,在项目开发结束后打包生产dist文件夹,只需要把该文件放到服务器即可

构建项目之后生成初始文件夹:

  1. build文件夹:存放构建项目所需的文件
  2. config文件夹:项目的设置文件
    1. index.js:设置路径、跨域代理、服务器、端口号等
  3. node_modules文件夹:安装依赖的文件
  4. src文件夹
    1. assets文件夹:存放页面相关的静态文件例如CSS
    2. components文件夹:存放页面使用的公共组件
    3. router/index.js:设置访问路径所对应的页面
    4. views文件夹:存放vue页面文件
    5. app.vue:页面主入口组件
    6. main.js:页面主js入口
  5. static文件夹:存放静态资源如图片等
  6. index.html:主页面
  7. package.json:项目所使用的依赖列表

2、Vuex核心概念

Vuex是一个专门为vue.js应用开发的状态管理模式,当我们构建一个大中型SPA时,vuex可以帮助我们更好的再组建外部统一管理状态。当多个vue组件需要同时使用一些参数时,如果通过参数传递会很麻烦,而且多个组件同时操纵数据会导致开发混乱,这就需要对它们进行统一管理。

1、state:vuex中的数据源,所有组件对数据的操作都是对它,类似于vue组件中的data,在实例化vuex后可通过state访问其中的数据:

console.log(store.state.count)

2、getters:由stsate中派生出的数据,在state数据的基础上做修改。

3、mutations:vuex中state的数据不可以直接进行修改,这样会造成混乱。修改state的唯一方法是提交mutation函数。

const store = new Vuex.Store({
 state: {
  count: 0
 },
 mutations: {
  increment (state) {
   state.count++
  }
 }
})

通过提交increment来使state中的count++

store.commit('increment')

4、action:可以自定义对象来提交mutation,与mutation不同的是它可以异步执行。action通过分发的方式触发:

actions: {
  incrementAction (context) {
   context.commit('increment')
  }
 }
store.dispatch('incrementAction') //通过分发来调用action

5、module:当管理的状态过多时,vue的store对象就会变得臃肿,这时可以将其分割为几个module,每个module可以有自己的state、mutation等。

          综上,vuex的数据流图如下:当vue components触发事件时,引起分发action,action提交到mutation,mutation改变state的值,导致重新渲染vue component组件。

Vue-CLI与Vuex使用方法实例分析

3、使用vuex

1、引入vuex文件或在项目的mian.js中引入并使用

<script src="../js/vuex.js"></script>

2、实例化Vuex

const store=new Vuex.Store({
   state:{
    count:10
   },
   mutations:{
    increment(state){    //只有通过mutation中的方法才可修改store中的值
     state.count++;
    }
   }
  });

3、在app中注册store

let vue=new Vue({
   el:'#app',
   data:{
   },
   store:store
 })

4、在注册后的vue的组件couter中可以使用store,通过computed属性访问$store.state中的数据:

components:{
    counter:{
     template:`<div>计数{{count}}</div>`,
     computed:{
      count(){
       return this.$store.state.count;
      }
     }
    }
   },

5、组件的add方法通过commit改变store中的值:

<div id="app">
  <counter></counter>
  <button @click="add">点击加一</button>
</div>
methods:{
    add(){
     this.$store.commit('increment')
    }
   }

也可以通过commit进行参数传递:this.$store.commit('increment',num)

6、通过getters得到处理后的数据:

const store=new Vuex.Store({
   state:{
    count:10
   },
   getters:{     //在getters中对state中的count处理之后输出为square,供外部调用
    square(state){
     return state.count*state.count;
    }
   },
   mutations:{
    increment(state){
     state.count++;
    }
   }
  });

        通过计算属性square调用$store.getters.square

computed:{
    square(){
     return this.$store.getters.square;
    }
   }

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
详解Vue调用手机相机和相册以及上传
May 05 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
Vue前端项目部署IIS的实现
Jan 06 #Javascript
Vue学习之常用指令实例详解
Jan 06 #Javascript
Vue学习之组件用法实例详解
Jan 06 #Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 #Javascript
Vue学习之axios的使用方法实例分析
Jan 06 #Javascript
vue 微信扫码登录(自定义样式)
Jan 06 #Javascript
React学习之JSX与react事件实例分析
Jan 06 #Javascript
You might like
php 模拟POST提交的2种方法详解
2013/06/17 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python super用法及原理详解
2020/01/20 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
竞选宣传委员演讲稿
2014/05/24 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
被告代理词范文
2015/05/25 职场文书
收入证明范本
2015/06/12 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS