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 相关文章推荐
Javascript 类与静态类的实现
Apr 01 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
js实现4个方向滚动的球
Mar 06 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
May 26 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
Oct 08 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
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下载远程文件类(支持断点续传)
2008/11/14 PHP
PHP MVC模式在网站架构中的实现分析
2010/03/04 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
房屋租赁协议书
2014/04/10 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
法制宣传月活动方案
2014/05/11 职场文书
经济管理专业求职信
2014/06/09 职场文书
2014年班级工作总结
2014/11/14 职场文书
2014年资料员工作总结
2014/11/18 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书