vuex 仓库store

vuex 仓库store

基本概念

store里面呢可以理解为全局的一个变量,与LocalStorage或者sessionStorage的联系的区别是

store是在内存

LocalStorage或者sessionStorage的数据是在硬盘上

案例效果

思路

1 首先要在store里面设置一个全局变量

2 然后在课程页面的标题引用这个全局变量

3 然后在课程详情页面修改这个全局变量,从而触发课程页面的标题改变。

代码

1 首先要在store里面设置一个全局变量

export default new Vuex.Store({
  state: {
      // 与LocalStorage或者sessionStorage的联系
      // 如果这个地方想要用到永久存储的数据比如LocalStorage或者sessionStorage
      //  course_page: LocalStorage.数据 这样来拿到数据
    course_page:'' 
  },
  mutations: {

  },
  actions: {

  }
})

2 然后在课程页面的标题引用这个全局变量

Course.vue

<template>
    <div class="page-first">
<!--        导航条-->
        <Navg></Navg>

        
        
        <h1><span>{{ title_name}}</span></h1>
        
        
        
<!--        <CourseCard></CourseCard>-->
<!--        被渲染的小组件们-->
        <CourseCard :cardcon="card" v-for="card in card_list" :key="card.title"></CourseCard>
    </div>
</template>


<script>
	.....
    export default {
        name: "Course",
          data(){
            return{
                //定义一个变量
                card_list:[],
                title_name: this.$store.state.course_page||'课程主页面默认值楼'
            }
        },
      .....
</script>

<style scoped>

3 课程详情页面修改这个全局变量,从而触发课程页面的标题改变。

CourseDetail.vue

<template>
    <div class="course-detail">
        <h1>课程详情页面</h1>
        <hr>
        <div class="edit">
            <input type="text" v-model="val">
            <button @click="editAction">修改</button>
        </div>
       ....
</template>

<script>
    export default {
        name: "CourseDetail",
        // ---模拟后台数据开始---。
        data(){
            return{
                course_ctx:'',
                val:''
            }
        },
        methods:{
            editAction(){
                if (this.val){
                    console.log(this.val);
                    // 直接修改全局变量
                    this.$store.state.course_page = this.val;
                    // 通过store自带的方法修改,好处是解耦合,比如可以在方法里规避违法词汇
                    this.$store.commit('editstate_course_page',this.val)
                }
            }
        },
       ......
</script>

拓展store的mutations参数

思路:

1 设置方法

2 commit提交方法从而处理全局变量

优势:

通过store自带的方法修改,好处是解耦合,可以在方法里进行逻辑处理比如规避违法词汇等。

代码:
store.js

export default new Vuex.Store({
  state: {
      // 与LocalStorage或者sessionStorage的联系
      // 如果这个地方想要用到永久存储的数据比如LocalStorage或者sessionStorage
      //  course_page: LocalStorage.数据 这样来拿到数据
    course_page:''
  },
  mutations: {
      // 注意这里面的方法只能接受到 state 和 参数1
      editstate_course_page(state,new_val){
          // state;
          state.course_page = new_val;
      }

  },
  actions: {

  }
})

CourseDetail.vue

methods:{
            editAction(){
                if (this.val){
                    console.log(this.val);
                    // 直接修改全局变量(不能这么干,因为有可能追踪不到变化)
                    // this.$store.state.course_page = this.val;
                    
                    // 我们通过提交 mutation 的方式,而非直接改变 store.state.count,是因为我们想要更明确地追踪到状态的变化。
                    // 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
                    // 通过store自带的方法修改,好处是解耦合,比如可以在方法里规避违法词汇
                    this.$store.commit('editstate_course_page',this.val)
                }
            }
        },
posted @ 2019-11-04 13:35  张明岩  阅读(246)  评论(0编辑  收藏  举报