|
问:啥是VUEX ?
答: 是一个专门为VUE应用程序的状态管理模式库;
问:VUEX是干啥的?
答: 1. 不同组件之间数据的共享; 2.组件里面数据的持久化;
问:VUEX的使用场景是什么?
答: 举个例子就类似于 主页 和 新闻页 无组件从属关系间的 数据传递;
问:VUEX怎么使用?
1. 安装 cnpm install vuex --save
2. 在 src 目录下,新建 vuex的文件夹,然后新建store.js 文件 ;
3. 在 store.js 中 引入,定义数据、定义方法,然后实例化,再然后抛出;
3.1 在state 中定义属性
3.2 在mutations中定义方法
3.3
4. 在需要通信的组件中使用,例如 主页和案例
4.1 先引入 import store from "./vuex/store.js"
4.2 在当前组件中注册 - // 先引入后注册
- import store from '../vuex/store.js'
- export default {
- data() {
- return {
-
- };
- },
- store, //就这样就算是注册 -。- 也不知道 谁 非得说这叫注册
- methods: {
-
- }
- };
复制代码 4.3 直接调用state中的数据 {{ this.$store.state.count }} 4.4 利用commit 调用数据中的方法 $this.$store.commit('incCount') ;
4.5 说到getter那就神奇又没啥卵用了, 这玩意就是数据改变时候触发的函数;
4.6 说到action 那就更神奇更没啥卵用了,据说特点是可以调用异步方法 ,在组件中 利用 dispatch调用
贴三个代码
vuex/store.js- import Vue from 'vue'
- import Vuex from 'vuex'
- Vue.use(Vuex);
- // 1.state用于在vuex中储存数据
- var state = {
- count:1
- }
- // 2.mutations放方法,主要用于改变 state中的数据
- var mutations={
- incCount(){
- ++state.count;
- }
- }
- // 3.getters 数据改变时触发 [类似计算属性] 传值不想写,没啥卵用
- var getters = {
-
- computedCount: (state) => {
- return state.count*2;
- }
-
- }
- // 4.action
- var actions ={
- incMutations(context){ // 方法名可以瞎写
- context.commit('incCount'); //间接 执行 Mutations 的 方法incCount
- }
- }
- // 实例化vuex
- const store = new Vuex.Store({
- state,
- mutations,
- getters,
- actions
- })
- export default store;
复制代码
试验品案例页面 Anli.vue- <template>
- <div id="anli">
- 这是案例组件
-
- <button @click="lmback()">点击触发返回上一步操作</button>
- <h2>组件嵌套</h2>
- <hr>
- <ol>
- <li> <router-link to="/anli/one"> 案例组件1</router-link></li>
- <li> <router-link to="/anli/two"> 案例组件2</router-link></li>
- <li> <router-link to="/anli/three"> 案例组件3 路由重定向的测试</router-link></li>
- <li> <router-link :to="{ name: 'lmsix', params: { userId: 123 }}" > 案例组件6 路由命名的测试</router-link></li>
- </ol>
- <div class="lmbox">
- <router-view></router-view>
- </div>
-
- <hr>
- {{this.$store.state.count}}
- <hr>
- <button @click="abc()"> 点击改变数据 </button>
- </div>
- </template>
- <script>
- // 先引入后注册
- import store from '../vuex/store.js'
- export default {
- data() {
- return {
- b: false,
- };
- },
- store, //这步完成注册
- methods: {
- abc(){
- this.$store.commit('incCount'); //commit 触发 mutations 内的方法
- // this.$store.dispatch('incMutations'); dispatch触发 actions内的方法
- }
- },
- mounted() {
- //在组件加载的时候就接收
- }
- };
- </script>
- <style>
- .lmbox{
- margin:10px auto;
- border:3px solid #eee;
- width: 400px;
- height: 200px;
- }
- </style>
复制代码
|
|