vue 老爹和儿子组件的艺术调用分分快三计划

作者:分分快三计划

 

分分快三计划 1

主要的传输方式有三种:

 

总结

本文主要对vue 用$emit 与 $on 来进行组件之间的数据传输.

 1 <!-- 子组件 -->
 2 <template>
 3     <div id="child">
 4         <button @click="tryToParent">click</button>
 5     </div>
 6 </template>
 7 <script>
 8 export default {
 9     name: 'child',
10     methods:{
11         tryToParent(){
12             // 通过$emit进行触发
13             // 第一个参数为父组件监听的事件名,后续参数为父组件方法的参数
14             this.$emit("toParent","我从子组件传来")
15         }
16     }
17 }
18 </script>
19 
20 <!-- 父组件 -->
21 <template>
22     <div id="parent">
23         <!-- 监听child的toParent事件广播,用fromChild进行处理 -->
24         <child @toParent="fromChild"></child>
25     </div>
26 </template>
27 <script>
28 import child from "./child.vue"
29 export default {
30     name: 'parent',
31     components:{child},
32     methods:{
33         fromChild(msg){
34             console.log(msg);  // 点击子组件的button,这里最终打印出“我从子组件传来”
35         }
36     }
37 }
38 </script>

以上所述是小编给大家介绍的vue2.0 如何把子组件的数据传给父组件(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

1.父组件到子组件通信

2.子组件到父组件的通信

3.兄弟组件之间的通信

 

一、父组件传值给子组件

父组件给子组件传子,使用props

//父组件:parent.vue
<template>
    <div>
        <child :vals = "msg"></child>
    </div>
</template>
<script>
import child from "./child";
export default {
    data(){
        return {
            msg:"我是父组件的数据,将传给子组件"
        }
    },
    components:{
        child
    }
}
</script>


//子组件:child.vue
<template>
    <div>
        {{vals}}
    </div>
</template>
<script>
export default {
      props:{ //父组件传值 可以是一个数组,对象
        vals:{
            type:String,//类型为字符窜
          default:"123" //可以设置默认值
        }
    },
}
</script>

 

2.子组件到父组件的通信

使用 $emit(eventname,option) 触发事件,

参数一:自定义事件名称,写法,小写或者用-连接,如event,event-name 不能写驼峰写法(eventName)

子组件给父组件传值,可以在子组件中使用$emit触发事件的值传出去,父组件通过事件监听,获取数据

 

但是,这里有一个问题,

1、究竟是由子组件内部主动传数据给父组件,由父组件监听接收(由子组件中操作决定什么时候传值)

2、还是通过父组件决定子组件什么时候传值给父组件,然后再监听接收 (由父组件中操作决定什么时候传值)

两种情况都有

2.1 : $meit事件触发,通过子组件内部的事件触发自定义事件$emit

2.2 : $meit事件触发, 可以通过父组件操作子组件 (ref)的事件来触发 自定义事件$emit

第一种情况:

//父组件:parent.vue
<template>
    <div>
        <child  v-on:childevent='wathChildEvent'></child>
        <div>子组件的数据为:{{msg}}</div>
    </div>
</template>
<script>
import child from "./child";
export default {
    data(){
        return{
            msg:""
        }
    },
    components:{
        child
    },
    methods:{
        wathChildEvent:function(vals){//直接监听 又子组件触发的事件,参数为子组件的传来的数据
            console.log(vals);//结果:这是子组件的数据,将有子组件操作触发传给父组件
            this.msg = vlas;
        } 
    }
}
</script>

//子组件:child.vue
<template>
    <div>
       <input type="button" value="子组件触发" @click="target">
    </div>
</template>
<script>
export default {
    data(){
            return {
            texts:'这是子组件的数据,将有子组件操作触发传给父组件'
            }
    },
    methods:{
        target:function(){ //有子组件的事件触发 自定义事件childevent
            this.$emit('childevent',this.texts);//触发一个在子组件中声明的事件 childEvnet
        }
    },
}
</script>

第二种情况:

//父组件:parent.vue
<template>
    <div>
        <child  v-on:childevent='wathChildEvent' ref="childcomp"></child>
        <input type="button" @click="parentEnvet" value="父组件触发" />
        <div>子组件的数据为:{{msg}}</div>
    </div>
</template>
<script>
import child from "./child";
export default {
    data(){
        return{
            msg:""
        }
    },
    components:{
        child
    },
    methods:{
        wathChildEvent:function(vals){//直接监听 又子组件触发的事件,参数为子组件的传来的数据
            console.log(vals);//这是子组件的数据,将有子组件操作触发传给父组件
            this.msg = vlas;
        },
        parentEnvet:function(){
            this.$refs['childcomp'].target(); //通过refs属性获取子组件实例,又父组件操作子组件的方法触发事件$meit
        }
    }
}
</script>

//子组件:child.vue
<template>
    <div>
      <!-- dothing..... -->
    </div>
</template>
<script>
export default {
    data(){
            return {
            texts:'这是子组件的数据,将有子组件操作触发传给父组件'
            }
    },
    methods:{
        target:function(){ //又子组件的事件触发 自定义事件childevent
            this.$emit('childevent',this.texts);//触发一个在子组件中声明的事件 childEvnet
        }
    },
}
</script>

将两者情况对比,区别就在于$emit 自定义事件的触发是有父组件还是子组件去触发

第一种,是在子组件中定义一个click点击事件来触发自定义事件$emit,然后在父组件监听

第二种,是在父组件中第一一个click点击事件,在组件中通过refs获取实例方法来直接触发事件,然后在父组件中监听

 

3.兄弟组件之间的通信

 (1)、兄弟之间传递数据通过事件

 (2)、创建一个新Vue的实例,让各个兄弟共用同一个事件机制。(关键点)

 (3)、传递数据方,通过事件触发$emit(方法名,传递的数据)。

 (4)、接收数据方,在mounted()钩子函数(挂载实例)中 触发事件$on(方法名,callback(接收数据的数据)),此时callback函数中的this已经发生了改变,可以使用箭头函数。

//建立一个空的Vue实例,将通信事件挂载在该实例上
//emptyVue.js
import Vue from 'vue'
export default new Vue()

//兄弟组件a:childa.vue
<template>
    <div>
        A组件->{{msg}}
        <input type="button" value="把a组件数据传给b" @click ="send">
    </div>
</template>
<script>
import vmson from "./emptyVue"
export default {
    data(){
        return {
            msg:"我是a组件的数据"
        }
    },
    methods:{
        send:function(){
            vmson.$emit("aevent",this.msg)
        }
    }
}
</script>


//兄弟组件b:childb.vue
<template>
     <div>
        b组件,a传的的数据为->{{msg}}
    </div>
</template>
<script>
import vmson from "./emptyVue"
export default {
 data(){
        return {
            msg:""
        }
    },
    mounted(){
        vmson.$on("aevent",(val)=>{//监听事件aevent,回调函数要使用箭头函数;
            console.log(val);//打印结果:我是a组件的数据
            this.msg = val;
        })
    }
}
</script>


//父组件:parent.vue
<template>
    <div>
        <childa><childa>
        <childb></childb>
    </div>
</template>
<script>
import childa from "./childa";
import childb from "./childb";
export default {
    data(){
        return{
            msg:""
        }
    },
    components:{
        childa,
        childb
    },

}
</script>

 

到此,vue中的组件通信传值基本可以搞定了,但是对于大型复杂的项目,建议采用vuex 状态管理更适合....

推荐参考学习:

          

         https://cn.vuejs.org/v2/api/#vm-on

 

 完结。。。谢谢

 1 <!-- 子组件 -->
 2 <template>
 3     <div id="child">
 4         <div>{{message1}}</div>
 5         <div>{{message2}}</div>
 6     </div>
 7 </template>
 8 <script>
 9 export default {
10     name: 'child',
11     data(){
12         return {
13             message1:"",
14             message2:""
15         }
16     },
17     methods:{
18         fromParent(msg){
19             this.message1 = msg
20         }
21     }
22 }
23 </script>
24 
25 <!-- 父组件 -->
26 <template>
27     <div id="parent">
28         <button @click="toChild">click</button>
29         <child ref="child"></child>
30     </div>
31 </template>
32 <script>
33 import child from "./child.vue"
34 export default {
35     name: 'parent',
36     components:{child},
37     methods:{
38         toChild(){
39             /** this.$refs.child返回child组件实例 **/
40 
41             // 调用子组件的fromParent方法
42             this.$refs.child.fromParent("我从父组件传递过来")
43             // 直接修改child的data
44             this.$refs.child.message2 = "啦啦啦"
45         }
46     }
47 }
48 </script>

您可能感兴趣的文章:

  • VUEJS 2.0 子组件访问/调用父组件的实例
  • vue 使用ref 让父组件调用子组件的方法
  • Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
  • vue父组件点击触发子组件事件的实例讲解
  • vue里面父组件修改子组件样式的方法
  • vue2.0 父组件给子组件传递数据的方法
  • vue父组件向子组件(props)传递数据的方法
  • vue父组件向子组件动态传值的两种方法
  • vue.js中父组件调用子组件的内部方法示例
  • vue父组件中获取子组件中的数据(实例讲解)
  • Vue2.0父组件与子组件之间的事件发射与接收实例代码
  • vue父组件通过props如何向子组件传递方法详解
  • vue2.x 父组件监听子组件事件并传回信息的方法
  • vue 老爹和儿子组件的艺术调用分分快三计划。Vue中父组件向子组件通信的方法
  • 详解vue2父组件传递props异步数据到子组件的问题
  • vue子组件使用自定义事件向父组件传递数据
  • vuejs2.0子组件改变父组件的数据实例
  • 图文介绍Vue父组件向子组件传值

$emit 子组件触发父组件的方法:

3、效果

$refs 父组件获取子组件实例,进而调用子组件方法或者直接修改子组件属性:

3、父组件直接用 v-on 来监听子组件触发的事件,需跟子组件中的$emit组合使用。

 

1、代码

  在复杂的vue应用中,应该用vuex的store来管理跨组件的数据交流,再根据数据的变化触发相应的方法。

子组件 A.vue

2、总结

父组件 App.vue

1、$emit很重要,使用 $emit(事件名,参数) 触发事件

<template>
 <div id="app">
 <!-- 父组件直接用 v-on 来监听子组件触发的事件。 -->
 <!-- 需跟子组件中的$emit组合使用 -->
 <A v-on:spot="spot"/>
 </div>
</template>

<script>
import A from './components/A'
export default {
 name: 'App',
 components: {
 A
 },
 methods:{
 spot:function(data){
  console.log(data)
 }
 }
}
</script>

在父组件 App.vue 中引用子组件 A.vue,把 A中的数据传给App.

ps:没看父组件传给子组件的先看看去。

2、子组件需要某种方式来触发自定义事件

<template>
 <div>
 <h3>这里是子组件的内容</h3>
 <button v-on:click="spot">点一下就传</button>
 </div>
</template>

<script>
 export default {
 methods: {
  spot: function() {
  // 与父组件通信一定要加上这句话
  this.$emit("spot", '我是子组件传给父组件的内容就我。。')
  }
 }
 }
</script>

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划