vue-Appvue里的公共组件改变值触发其他组件或vue页面监听

34次阅读

共计 844 个字符,预计需要花费 3 分钟才能阅读完成。

业务场景重现
现在我的 App.vue 里面有一个头部的公共组件,头部组件里有一个输入框,当我输入词条时,将词条传进 App.vue 里的 <router-view> 里的.vue 页面,并进行查询获取数据
解决思路如下

1. 如何拿到头部的词条

2. 当词条改变时如何触发.vue 里的请求数据事件

解决方案
我是用 vuex 数据仓库来存储词条的,当词条改变时,修改数据仓库里的词条
然后在.vue 页面里监听这个词条,当词条改变时触发请求数据的事件

代码

数据仓库 store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {searchKey: ''       // 存储词条的变量},
  mutations: {                 // 修改数据仓库的事件
    changeSearchKey(state,value){state.searchKey = value}
  },
  actions: {                 // 推荐使用的异步修改数据仓库
    setSearchKey(context,value){context.commit('changeSearchKey',value)
   }
  }
})

App.vue 里的 header 组件

goSearch: function(){if(this.value){this.$store.dispatch('setSearchKey',this.value)  // 当输入词条时,将词条更新到数据仓库
            }
        },

vue 页面里监听词条

    computed: {                     // 监听词条
        getSearchKey(){return this.$store.state.searchKey}
    },
    watch: {
        getSearchKey: {handler(newValue,oldValue){  // 当词条改变时执行事件
                this.recordis(newValue)
                // console.log('new',newValue)
                // console.log('old',oldValue)
            }
        }

    },

正文完
 0