vuex

【转】vuex2.0 之 modules

匿名 (未验证) 提交于 2019-12-03 00:39:02
  vue 使用的是单一状态树对整个应用的状态进行管理,也就是说,应用中的所有状态都放到store中,如果是一个大型应用,状态非常多, store 就会非常庞大,不太好管理。这时vuex 提供了另外一种方式,可以把整个store 分成几个大的模块,如登录模块,用户模块等,每一个模块都有自己的state, mutation, actions ,getters , 它就相当于是一个小的store,然后我们的根store(通过new Vuex.Store 生成的store) 通过它的modules属性引入这些模块,从而我们的组件就可以使用这些modules 中状态(state).   1, 在src 目录下新一个login文件夹,在里面新建index.js 用于存放login 模块的状态。 为了简单起见,我把模块下的state, actions,mutations, getters 全放在index.js文件中。 先简单给它增加一个状态,userName: “sam” const state = { useName : " sam " }; const mutations = { }; const actions = { }; const getters = { }; // 不要忘记把state, mutations等暴露出去。 export default { state ,

How to check in a Vue component if a user is authenticated in Laravel?

丶灬走出姿态 提交于 2019-12-03 00:31:00
As the title states, I'm a little confused how I would tackle a method in my Vue Component with if/else statement based on if the user is logged in and authenticated with Laravel's Auth facade. I'm making various Axios requests which I need to allow/disallow based on if user logged in. I have VUEX setup and was thinking that I can use local storage somehow to have a state for isLoggedin for example that works with Laravel. But I don't know if this is correct method, or secure and presumably Laravel is already storing it's authentication. So can I just access that direct in Vue? Some unclean

vue2.0探索之路--vuex使用场景和集成

匿名 (未验证) 提交于 2019-12-03 00:30:01
官网 已经介绍的很详细了,再复述一遍貌似没太多意义。后面想了下,不复述、总结,如何加深自己的印象和理解呢,毕竟老年人,记性越来越差了。所以,开始吧。 一、概述 状态管理模式。 它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 二、使用场景 状态管理,就是管理的全局变量。在我们的项目中,特别是较大型的项目,会有很多参数是很多地方都会用到的,比如,一个登录的token,很多页面都需要这个信息,当然我们可以时刻在对应页面操作cookie,但是有这么个统一管理的地方,为啥不用呢。所以,状态管理不是必需的,所有状态管理能做的,都能用其他方式实现,但是状态管理提供了统一管理的地方,操作方便,也更加明确。但是别啥都往里头扔了,一些只是父组件和子组件用到的,能用$emit和props简单实现的,就用这个就行了。 三、集成 先贴上我的集成代码: 目录结构 index.js为总入口 getters:state中的状态获取 user.js api中为请求统一封装 下面开始对vuex的相关功能做个总结,详情请参考: vuex官网 。 1. state 存在mapState辅助函数,见第六小结 import Vue from 'vue'; import App from './App'; import store from './store/index'

Vue-cli使用prerender-spa-plugin插件预渲染

匿名 (未验证) 提交于 2019-12-03 00:30:01
1.执行:npm run build 后生成的dist打包文件直接放在服务器上显示空白? 解决:到config文件夹中打开index.js文件。 文件里面有两个assetsPublicPath属性,更改第一个,也就是更改build里面的assetsPublicPath属性: image.png assetsPublicPath属性作用是指定编译发布的根目录,‘/’指的是项目的根目录 ,’./’指的是当前目录。 2.背景图片的引用问题 资源里面的背景图片,不像index.html中加载资源一样,通过./static/js/app.js引用可以正常加载,图片资源是通过css加载的,如 background: url("../../assets/images/logo-index.png") no-repeat;被相对打包后变成了url(static/img/logo-index.2f00bf2.png) no-repeat所以我们要保留css引用图片的正常路径,即: url(../../static/img/logo-index.2f00bf2.png) no-repeat 那么就需要修改build文件夹下的utils.js代码,如图所示: image.png 3.解决vuex requires a Promise polyfill in this browser问题

Vuex组件内部单独使用方法

匿名 (未验证) 提交于 2019-12-03 00:22:01
1、首先保证有vue的环境,其次vuex已安装 2、组件内部导入 import vuex from 'vuex'; import myvuex from './store.js'; const {mapMutations,mapState} = vuex.createNamespacedHelpers('scoreEntry') 3、在mounted里面注册 mounted() { this.$store.registerModule("scoreEntry", myvuex); }, 4、在computed里面引入store.js里面的属性 computed: { ...mapState(["tercherData"]), }, 5、在methods里面调用store.js里面的方法 store.js文件内容 export default { namespaced: true, state:{ tercherData:{ modifyRecordId:'', //修改记录id taskId:'', //成绩录入任务列表(学期级别)dataList中对象返回的id } }, getters:{ }, mutations: { teacherSetTermId(state,payload){ state.tercherData.modifyRecordId = payload

vuex 笔记

匿名 (未验证) 提交于 2019-12-03 00:21:02
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能 如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此――如果您的应用够简单,您最好不要使用 Vuex。一个简单的 global event bus 就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择 ― Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。 实例: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({

node 版本控制 package.json

匿名 (未验证) 提交于 2019-12-03 00:20:01
我们使用node开发时,经常需要依赖一些模块,我们进行了下载之后,便一直在该版本的模块环境下进行开发,但是线上的服务器一般都是根据依赖来配置文件,重新下载各个模块,但是保不齐某个模块的版本已经更新了,这时线上的包会更新到最新的版本,但你的代码还是依据老版本来写的,这时可能会产生一些不知名的Bug, 首先看npm包的版本号的格式X.Y.Z,版本好的格式遵循semver 2.0规范,其中X为主版本号,只有更新了不向下兼容的API时进行修改主版本号,Y为次版本号,当模块增加了向下兼容的功能时进行修改,Z为修订版本号,当模块进行了向下兼容的bug修改后进行修改,这就是“语义化的版本控制”。 默认情况下,当用--save或者--save-dev安装一个模块时,npm通过脱字符(^)来限定所安装模块的主版本号,而该脱字符对于不同的版本号有不同的更新机制 ^1.2.1 代表的更新版本范围为 >=1.2.1 && < 2.0.0 ^0.2.1 代表的更新版本范围为 >=0.2.1 && < 0.3.0 ^0.0.2 代表的更新版本范围为 0.0.2(相当于锁定为了0.0.2版本) ##### 对于上述字符的版本控制,我们可以来进行一个尝试: 首先可以看到package.json中对于vuex的版本依赖为^2.3.1 然后查看以下项目中安装的vuex模块的版本号 果然没错,改版本号为2.3.1

vuex中mapState、mapGetters、mapActions、mapMutations的使用

匿名 (未验证) 提交于 2019-12-03 00:19:01
第一步:创建store文件,添加index.js文件 import Vue from 'vue' import Vuex from 'vuex' import axiosfrom 'axios' 第三步:将Vuex作为一个插件Vue.use(Vuex) 第四步:定义一个容器 let store= new Vuex.Store({ // 参数与方法写在这里 // 定义状态 state :{ // 定义在这里的数据是公用的 num : 10 , navs :[] }, getters :{ }, mutations :{ add(state,playload){ state.num+=playload.n; }, desc(state,playload){ state.num-=playload.n }, getNavs(state,playload){ // 改变state state.navs=playload.res } }, actions :{ getNavs({commit}){ // 异步请求 通过mock模拟数据进行后台请求 console .log( 'store this' ) console .log( this ) console .log(axios) axios.get( 'http://easy-mock.com/mock

Vuex持久化存储之vuex-persist

匿名 (未验证) 提交于 2019-12-02 23:52:01
在引入mapMutations时报错,解决方法: 1:npm install --save-dev babel-plugin-transform-object-rest-spread 2:在package.json文件中引入下面两个插件(该步骤不知道有没有用到) "babel-plugin-transform-runtime": "^6.22.0", "babel-preset-stage-2": "^6.22.0", 3:安装插件后,接着在babel的配置文件 .babelrc 中应用插件 { "presets": [ ["env", { "modules": false }] ], "plugins": ["transform-object-rest-spread"] } 4:重新npm install npm run dev 就可以了 Vuex 解决了多视图之间的数据共享问题。但是运用过程中又带来了一个新的问题是,Vuex 的状态存储并不能持久化。 也就是说当你存储在 Vuex 中的 store 里的数据,只要一刷新页面,数据就丢失了。 引入vuex-persist 插件,它就是为 Vuex 持久化存储而生的一个插件。 不需要你手动存取 storage ,而是直接将状态保存至 cookie 或者 localStorage 中。具体用法如下: 安装: npm install -

Vuex 模块化 (2.0)

匿名 (未验证) 提交于 2019-12-02 23:40:02
Vuex 模块化 (2.0) Vuex 强调使用单一状态树,即在一个项目里只有一个 store,这个 store 集中管理了项目中所有的数据以及对数据的操作行为。但是这样带来的问题是 store 可能会非常臃肿庞大不易维护,所以就需要对状态树进行模块化的拆分。 首先贴出一个逻辑比较复杂的H5项目: 源码 DEMO 该项目主要包括 banner、feeds、profile 三个部分。其中 feeds 模块最复杂,需要对数据列表进行处理,如果单条数据中是图片:1张按照屏幕宽展示;2张各占50%;3张以上采用九宫格形式展示;如果单条数据是视频,则显示播放按钮,播放一条视频时,其他视频暂停。 由于该项目数据、交互较多,我们使用 Vuex 对数据进行托管,只在 Vue 组件中保留最基本的操作。 如果不使用 Vuex,许多数据流需要通过 props 的方便向下传递,十分不便,尤其是一些跨组件的操作更加困难。使用 Vuex 后就可以将数据与操作保留在 store 中,每个组件都能轻松调用。 本项目中除了根 store 以外,还通过 module 将各组件的 store 分开管理,还不了解的同学可以往下看。 Module 首先介绍下基本的组件化规则:你可以根据项目组件的划分来拆分 store,每个模块里管理着当前组件的状态以及行为,最后将这些模块在根 store 进行组合。 const