组件传值-子组件通过事件调用向父组件传值|学习笔记

简介: 快速学习组件传值-子组件通过事件调用向父组件传值

开发者学堂课程【Vue.js 入门与实战组件传值-子组件通过事件调用向父组件传值】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/586/detail/8186


组件传值-子组件通过事件调用向父组件传值


之前学习了父组件向子组件传值,此时传递的 msg 没有任何特点,只是一个数据,现在学习一些特殊的内容:

当父组件只有一个简单的内容,想要把父组件当中的一些方法传递给子组件的话,需要如下代码:

<div id=app></div>

<template id=tmp1”>

</div>

<h1>这是 子组件</h1>

//定义了一个字面量类型的组件模板对象

var com2 = {

template:#tmpl

//通过指定了一个Id,表示说要去加载这个指定的Id的template元素中的内容,当作组件的HTML结构

此时,组件模版对象已经定义结束。但是不可以直接使用到 app 中,因为这只是一个变量,并不是一个组件的名称,如果想引用的话,一种是全局通过 vue.compoment 去注册,一种是在组件 vm 内部通过compoments 去定义。

<body>

<div id=app>

<com2></com2>

</div>

此时执行命令,可以看到执行结果为:

image.png

显示正常, 且没有报错。

现在的需求是把方法传递给子组件,所以需要在父组件 vm 身上定义一个方法,代码如下:

//创建Vue实例,得到ViewModel

var vm = new Vue({

el:#app,

data: {},

methods: {

show() {

//console.log(调用了父组件身上的show方法:---)

}

}

现在想要把 show 方法传递给子组件,传递方法时只能通过事件绑定机制去自定义一个时间属性,需要编辑子组件:

<body>

<div id=app>

<com2 v-on:func=show></com2>

</div>

<!--父组件向子组件传递方法,使用的是事件绑定机制;v-on,当我们自定义了一个事件属性之后,那么,子组件就能够通过某些方式,来调用传递进去的这个方法了-->

现在,子组件身上已经有了一个 func 的方法,后面的表达式不可以随便写,而前面的名称可以随便写。Show 的后面没带引号和小括号代表方法的引用原封不动交给 func 去保存一份,这样在com2 中就可以直接使用 func 这个方法。

<div id=app>

<com2 v-on:func123=show></com2>

</div>

<template id=tmpl”>

<div>

<hl>这是子组件</hl>

<input type=button value=这是子组件的按钮-点击它,触发父组件传递过来的 func 方法>

执行可以看到已经有了这个现实,但是点击没有效果,因为并没有给其绑定事件。此时将以上代码修改为:

<input type=button value=这是子组件的按钮-点击它,触发父组件传递过来的 func 方法@click=“myclick”>

此时执行,可以进行点击。所以:

image.png

//当点击子组件的按钮的时候,如何拿到父组件传递过来的func方法,并调用这个方法这是我们需要考虑的一个问题。

//emit英文原意:触发、调用、发射

//this.$emit(func

this.$emit(func123,)

}

保存,刷新后,查看执行结果,此时输出内容为:调用了父组件身上的 show 的方法。

通过事件绑定机制,我们把父组件的 show 方法传递给了子组件。

//创建Vue实例,得到ViewModel

var vm = new Vue({

el:#app,

data: {},

methods: {

show(data) {

//console.log(调用了父组件身上的show方法:---+data)

}

},

这个方法父组件没有自己调用,而是通过传递给子组件,而这只是调用,而没有传参,应该:

//this.$emit(func123,123,456)

this.$emit(func123,123,)

此时执行结果,可以看到此时输出内容为:调用了父组件身上的 show 的方法---123456.这是调用父组件方法,并向父组件传参。

data() {

return {

sonmsg: (name:小头儿子,age:6)

}

},

methods:{

myclick() {

//this.$emit(functhis.sonmsg)

Console.log(data)

Datamsgformson:null

This.Datamsgformson=date

此时点击执行,可以发现,方法和信息已经传递过来了。

image.png

由此可以总结,本质上是,父组件给子组件传递一个方法后,子组件需要想办法去调用,在调用的时候,可以把子组件的数据顺便当做数据参数传递进去,父组件就可以拿到传递的数据。

相关文章
|
26天前
|
JavaScript
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
|
21天前
|
JavaScript
子组件向父组件传参的方式?
子组件向父组件传参的方式?
10 0
|
1月前
|
JavaScript
vue父组件点击事件向子组件传递值
vue父组件点击事件向子组件传递值
|
1月前
|
JavaScript 前端开发 算法
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(一)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
31 0
|
1月前
|
前端开发 JavaScript 开发者
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(二)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
31 0
|
1月前
|
小程序
子组件调用父组件的方法并传递数据
子组件调用父组件的方法并传递数据
|
1月前
|
JavaScript
vue子组件向父组件传参的方式
vue子组件向父组件传参的方式
36 0
|
9月前
|
JavaScript
vue中子组件如何向父组件传值与父组件如何向子组件传值
vue中子组件如何向父组件传值与父组件如何向子组件传值
118 0
|
10月前
vue3 引用组件 父组件传递参数给子组件
vue3 引用组件 父组件传递参数给子组件
87 0
VUE中父组件传给子组件传值,watch第一次监听不到
VUE中父组件传给子组件传值,watch第一次监听不到