一.获取vuex中的数据

1-1.如何获取vuex中的数据

$store.data.city

  1. //1.新建vue文件时,选中vuex
  2. //2.在src/router/index.js中添加数据
  3. export default new Vuex.Store({
  4. state: {
  5. city:"武汉"
  6. },
  7. ...
  8. })
  9. //3.在主页面使用vue中的数据
  10. export default {
  11. name: 'home',
  12. mounted(){
  13. console.log(this.$store.state.city)
  14. },
  15. computed:{
  16. city(){ //可以通过计算属性拿到city
  17. return this.$store.state.city
  18. }
  19. }
  20. }
  21. //4.使用
  22. <router-link to="/detail" tag="p">{{city}}</router-link>
  23. //或者 <router-link>{{this.$store.state.city}}</router-link>

1-2this.$store.dispatch向vuex派发一个事件—actions,同时传递一个参数—city

  1. //跳转的对应detail页面中,再从detail页面中跳到首页
  2. <router-link to="/films/nowPlaying" tag="button" v-for="item of cities" :key="item"
  3. @click.native="handleClick(item)">
  4. {{item}}
  5. </router-link>
  6. export default {
  7. name:"Detail",
  8. data(){
  9. return{
  10. cities:["上海","北京","深圳","广州"]
  11. }
  12. },
  13. methods:{
  14. handleClick(city){
  15. /* this.$store.dispatch 向vuex派发一个事件,同时传递一个参数 */
  16. this.$store.dispatch("changeCity",city)
  17. }
  18. }

二.组件@click事件

  1. @click.native //给组件事件必须加上.native修饰符

三.vuex的工作

vuex.png

  1. //1.通过this.$store.dispatch()向vuex中的actions派发一个事件同时传递一个参数
  2. methods:{
  3. handleClick(city){
  4. /* this.$store.dispatch 向vuex派发一个事件,同时传递一个参数 */
  5. this.$store.dispatch("changeCity",city)
  6. }
  7. }
  8. //2.vuex-actions中接收dispatch派发过来的事件和参数
  9. export default new Vuex.Store({
  10. ...
  11. actions: {
  12. changeCity(ctx,city){
  13. /* ctx表示上下文 this.$store
  14. city是自定义事件传递过来的参数 */
  15. //3.在actions中使用commit方法向mutations提交一个事件,同时传递一个参数
  16. ctx.commit("toggleCity",city) //toggleCity:自定义一个事件名
  17. }
  18. },
  19. })
  20. //4.在mutations中接收actions派发过来的事件和参数,并修改参数
  21. export default new Vuex.Store({
  22. state: {
  23. city:"武汉"
  24. },
  25. mutations: {
  26. toggleCity(state,city){
  27. state.city=city
  28. }
  29. },
  30. actions: {
  31. changeCity(ctx,city){
  32. ctx.commit("toggleCity",city)
  33. }
  34. },
  35. })

四.数据持久化

  1. //1.设置缓存
  2. export default new Vuex.Store({
  3. ...
  4. actions: {
  5. changeCity(ctx,city){
  6. ctx.commit("toggleCity",city)
  7. localStorage.setItem("city",city)
  8. }
  9. },
  10. })
  11. //2.获取缓存,有缓存就取缓存,没有缓存就设置缓存
  12. function getCity(){
  13. let defaultCity="武汉";
  14. if(localStorage.getItem("city")){
  15. defaultCity=localStorage.getItem("city")
  16. }
  17. return defaultCity
  18. }
  19. //3.使用
  20. export default new Vuex.Store({
  21. state: {
  22. city:getCity()
  23. },
  24. ...
  25. })