vue的组件传值

Posted Lumbago~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
  

以上是关于vue的组件传值的主要内容,如果未能解决你的问题,请参考以下文章

vue3组件传值方式

Vue 父子组件、兄弟组件传值

Vue-Cli—04.父子组件传值祖孙组件传值兄弟组件传值

VUE父子组件之间的传值,以及兄弟组件之间的传值

vue点击按钮打开组件并向组件传值

vue中父子传值