vue 全网最全传参方式

442 阅读2分钟

一 父传子

1.父组件

在父元素调用子元素的自定义标签上面设置传参变量 例子如下:

 <player :PlayMusic="PlayMusic"></player>

2.子组件

在export default 下设置一个props例子如下:

   props: ["PlayMusic"]

然后可以在watch里面监听该变量,也可以在页面中直接显示,也可在在函数里面用this访问

二 子传父

1.子组件

在子组件要传参的地方设置如下:

 this.$emit("设置监听事件", 要传参的变量或者参数);

2.父组件

在父组件调用子组件的自定义标签上面 设置如下:

 <heade @子元素设置的监听事件="submit"></heade>

Submit是一个自定义回调函数 例子如下:

 submit(data) {
    console.log(data);
}
data为子组件传过来的参数

三 兄弟传参

在src新建一个js文件 内容如下:

import Vue from 'vue';
export default new Vue();

在main.js中引用该js,内容如下:

import self from "../src/self.js"
Vue.prototype.self = self

在传参组件设置

 this.self.$emit("设置一个监听事件", 要传参数的变量);

接收参数组件

 this.self.$on("监听事件后运行函数", val => {
         val为接收参数
});

四 点击事件router传参

传参页面例子如下:

  this.$router.push({ path: "跳转页面路由", query: { id: id } });

跳转页面例子如下:

this.$route.query.id;

五 vue传参

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {        //存储状态(变量)
    //公共变量
    count:0
  },
  mutations: {     //自定义事件类似。
       //公共事件函数
       //函数第一个参数默认为state,参数n第二个函数是主键传过来的实参
         show(state, n) {
            return (state.count=n)
}   
  },
  actions: {        //异步操作。在组件中使用是$store.dispath('')
    add({ commit }, n){ //函数第一个参数为默认参数,第二个参数是传过来的实参
        return commit('show', n)
    }
  }
})

组件中

 $store.state.变量名     在methods里面要加this

添加一个点击事件,在methods点击事件函数

 //Mutations 点击事件处理函数
Click(n){
  this.$store.commit(‘show’,n);}

//actions异步处理函数
Reduce(n){
  this.$store.dispatch('add',n)}

六 vue小技巧

1.vue this.$forceUpdate() 使用v-for循环,动态绑定失效解决方法。

问题原因:在v-for循环中,我们在函数中改变了item中的值,在console.log()中查看是修改成功了,但在页面中没有及时刷新改变后的值。
解决方法:使用vue自带的 this.$forceUpdate() 迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

2.vue解决刷新页面vuex数据

在App.vue中,created初始化生命周期中写入以下方法
  created() {
    window.addEventListener("beforeunload", () => {
      sessionStorage.setItem("messageStore", JSON.stringify(this.$store.state));
    });
    // 在页面加载时读取sessionStorage里的状态信息
    this.$store.replaceState(
      Object.assign(
        this.$store.state,
        JSON.parse(sessionStorage.getItem("messageStore"))
      )
    );
  }
replaceState这个方法呢,查了api,就是替换 store 的根状态,然后通过对象赋值assign将localStorage进行赋值
beforeunload这个方法是在页面刷新时触发的,将store中的信息存sessionStorage
这样就通过sessionStorage来避免vuex刷新数据消失的问题了

3.vue中监听路由参数变化的方法

在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,如果不监听路由参数值的变化,页面无数据刷新,需手动刷新浏览器,这样做就不是我们的预期效果。
watch: {
      $route(){
        调用执行的函数
      },
   },