vue的组件传值

在这里插入图片描述

**

1.父子传参

**
父子组件传参

2.子组件

在父组件的子组件标签上绑定一个事件,所需要的调用的方法,然后在子组件中通过$emit(‘事件名’,参数)来触发父组件中的方法,是以参数的形式传递的。

3.vuex

vuex我理解的话就是比父子组件传参好用而且好理解,他就是将组件中需要存储的值用this.$store.commit(‘方法名’,数据);给传到vuex中然后用mutations调用这个方法来放在state定义的数据中,然后在其他所有组件内都可以使用这个数据啦。

在组件的方法中使用传到vuex中

  this.$store.commit("logintrue", this.trueFalse);

在vuex store的index.js中调用mutation中

  logintrue(state, objs) {
            console.log(objs.trueFalse);
        },

4.eventBus(兄弟组件传参)

EventBus Vue中的 事件总线

//首先在main.js种挂载全局EventBus

Vuex.prototype.$EventBus = new Vue()

//然后在A组件的方法中用
	Msg(){
         this.$EventBus.$emit('Msg',"这是组件A发送的消息!")
     	}
//然后在B组件的mounted
  mounted(){
            this.$EventBus.$on('sendMsg',(msg)=>{
                console.log(msg);//这是组件A传递过来的消息!
            })
        },

5.本地存储

localstorage
sessionstorage
cookies
简单拿localstorage举个例子吧,就是用window.localstorage.setItem(‘名’,参数’’)先把数据存放到里面,然后在其他组件中用window.localstorage.getItem(‘名’,参数’’);来获取就ok了。

6.全局变量

全局变量的话是在main.js中设置在Vue的原形中定义的变量,在所有的组件中都可以使用全局变量Vuex.prototype.名=值;在组件中直接使用名字即可(我一般名字前会加个 跟 跟 router和$store等一致)

7.promise


function doubleUp(value) {
    return value * 2;
}
function increment(value) {
    return value + 1;
}
function output(value) {
    console.log(value);// => (1 + 1) * 2
}
 
var promise = Promise.resolve(1);
promise
    .then(increment)
    .then(doubleUp)
    .then(output)
    .catch(function(error){
        // promise chain中出现异常的时候会被调用
        console.error(error);

Promise.resolve(1); 传递 1 给 increment 函数

函数 increment 对接收的参数进行 +1 操作并返回(通过return)

这时参数变为2,并再次传给 doubleUp 函数

最后在函数 output 中打印结果

8.this.$refs

“父组件调用子组件中的方法”,并传值;

父组件:


<!--父组件中定义的简单的触发事件-->
<body>
<el-form-item>
     <el-button @click="testThisRefs">测试$refs</el-button>
</el-form-item>
</body>
 
<script>
<!--引入子组件定义 ref="refsChildData"-->
<main-menu ref="refsChildData"></main-menu>
 
 
<!--触发的方法事件-->
methods(){
   testThisRefs(){
       let data = this.formData.projectItem; 
       //refsChildData在子组件中事先定义好了,testRefsChildData是子组件中的方法
       //data是要传递的参数
       this.$refs.refsChildData.testRefsChildData(data);
   }
}</script>

子组件:

methods(){
   testRefsChildData(data){
       console.log("---------父组件调用的子组件中的方法:",data)
   }

}
父组件中点击按钮触发子组件的 testRefsChildData()方法

9. p a r e n t / parent/ parent/children

父组件:

<template>
  <div>
    <h1>父组件</h1>
    <h-child></h-child>
  </div>
</template>
<script>
  // 引入子组件
  import HChild from './Child'
  export default {
    name: 'Parent',
    components: {
      HChild
    },
    data () {
      return {
        msg: 'data from parent'
      }
    },
    methods: {
      fun () {
        console.log('parent fun')
      }
    }
  }
</script>

子组件:

<template>
  <div>
    <h1>子组件</h1>
    <button @click="showParent">调用父组件的数据和方法</button>
  </div>
</template>
<script>
  export default {
    name: 'Child',
    methods: {
      showParent () {
        // 获取到所有的子组件
        console.log(this.$parent)
        // 获取指定子组件中的指定数据
        console.log(this.$parent.msg)
        // 调用子组件的方法
        this.$parent.fun()
      }
    }
  }
</script>

10路由传参 query

就是在跳转路由是在url路径后面加上?=‘参数’来传递参数,然后可以用this.route.query.(参数)来接收就行或者监听路由来获取;
还可以在方法中用:

 方法名(){
 this.$router.push({ path: "/goods", query: { productID: list } });
 }
 在组件中用
 mounted(){
 //挂载时   接收一下
  var id = this.$route.query.productID;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值