vue父子组件之间相互传值
1. 子组件使用父组件方法,并向父组件传值
子组件代码
<template>
<div class="menu">
<div class="item-group" v-for="(item,index) in menu">
<router-link :to="item.url" tag="div" class="wrap" @click.native="handlerClick(item.txt)">
<!-- .native实现原生事件 -->
<div :class="item.icon"></div>
<div class="txt">{{item.txt}}</div>
</router-link>
</div>
</div>
</template> <script>
export default{
name:"Menu",
props:{
menu:{
type:Array
}
},
data(){
return{
show:false
}
},
methods:{
//子组件使用父组件方法,并向父组件传值
handlerClick(txt){
this.$emit("func",txt)
},
}
}
</script>
父组件代码:
<template>
<div class="recommend">
<Menu :menu="nav" @func="show" ></Menu>
<Menu :menu="more" style="background-color: #f5f5f5; padding:10px 0px" v-show="state"></Menu>
<div class="song-list-area">
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
</div>
</div>
</template> <script>
import Menu from "../comment/menu.vue"
export default{
name:"Recommend",
data(){
return{
nav:[
{id:0,txt:"乐库",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:1,txt:"猜你喜欢",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:2,txt:"每日推荐",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:3,txt:"排行榜",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:4,txt:"更多",icon:"iconfont icon-aixin_line",hiden:false,url:"/"}
],
more:[
{id:0,txt:"音乐相册",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:1,txt:"相亲",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:2,txt:"偶遇",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:3,txt:"音乐速配",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:4,txt:"语音直播",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:5,txt:"探索",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:6,txt:"游戏中心",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:7,txt:"唱片店",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:8,txt:"首唱会",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:9,txt:"铃声彩铃",icon:"iconfont icon-aixin_line",hiden:false,url:"/"}
],
state:false
}
},
components:{
Menu
},
mounted() { },
methods:{
show(data){
console.log("data",data)
this.nav.forEach((item,index)=>{
if(item.txt==data){
this.state=! this.state
}
})
},
}
}
</script>
主要是子组件使用this.$emit("定义父组件方法名称",参数)
父组件就可以使用 @定义父组件方法的名称="方法名"
2.父组件使用子组件方法 ,并向子组件传递数据
子组件代码:
<template>
<div class="menu">
<div class="item-group" v-for="(item,index) in menu">
<router-link :to="item.url" tag="div" class="wrap" @click.native="handlerClick">
<!-- .native实现原生事件 -->
<div :class="item.icon"></div>
<div class="txt">{{item.txt}}</div>
</router-link>
</div>
</div>
</template> <script>
export default{
name:"Menu",
props:{
menu:{
type:Array
}
},
data(){
return{
show:false
}
},
methods:{
handlerClick(txt){
console.log(txt)
}, // 子组件使用父组件方法,并向父组件传值
// handlerClick(txt){
// this.$emit("func",txt)
// },
}
}
</script>
父组件代码:
<template>
<div class="recommend">
<Menu :menu="nav" ref="nav"></Menu>
<input type="button" value="点击" @click=handlerClick()>
<Menu :menu="more" style="background-color: #f5f5f5; padding:10px 0px" v-show="state"></Menu>
<div class="song-list-area">
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
<div class="song-group">
<img src="" alt="">
<p>原来那些歌的原曲在这里</p>
</div>
</div>
</div>
</template> <script>
import Menu from "../comment/menu.vue"
export default{
name:"Recommend",
data(){
return{
nav:[
{id:0,txt:"乐库",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:1,txt:"猜你喜欢",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:2,txt:"每日推荐",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:3,txt:"排行榜",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:4,txt:"更多",icon:"iconfont icon-aixin_line",hiden:false,url:"/"}
],
more:[
{id:0,txt:"音乐相册",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:1,txt:"相亲",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:2,txt:"偶遇",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:3,txt:"音乐速配",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:4,txt:"语音直播",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:5,txt:"探索",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:6,txt:"游戏中心",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:7,txt:"唱片店",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:8,txt:"首唱会",icon:"iconfont icon-aixin_line",hiden:false,url:"/"},
{id:9,txt:"铃声彩铃",icon:"iconfont icon-aixin_line",hiden:false,url:"/"}
],
state:false
}
},
components:{
Menu
},
mounted() { },
methods:{
handlerClick(){
this.$refs.nav.handlerClick("我是父组件向子组件传递的值")
}
// show(data){
// console.log("data",data)
// this.nav.forEach((item,index)=>{
// if(item.txt==data){
// this.state=! this.state
// }
// })
// },
}
}
</script>
主要是在父组件使用的子组件上添加 ref="名称" 在父组件方法中使用this.$refs.名称.子组件方法名称(传递的参数)
子组件定义方法 子组件方法名称(参数){console.log(参数)}
3.父组件向子组件传递数据也可以通过 在子组件中使用props定义传递的数据类型等
在父组件中的子组件使用中绑定数据
vue父子组件之间相互传值的更多相关文章
- 浅谈vue父子组件之间的传值
前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热.Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1.父组件向 ...
- VUE 父子组件之间通信传值 props和 $emit
1.父组件传值给子组件 $props,子组件传值给父组件 $emit 父组件 <div id="app" > <tr ...
- vue父子组件之间的传值
引入组件 父组件 <div> <form-edit></form-edit> </div> import FormEdit from "路径& ...
- vue项目中的父子组件之间的传值。
首先说一下父子组件就是在一个vue文件中引入另一个vue文件,被引入vue文件就是子组件,引入vue文件的vue文件就是父组件.而在父组件中是不能直接调用子组件中的变量值的.下面详细说一下,父子组件之 ...
- vue中父子组件之间的传值、非父子组件之间的传值
在Vue实例中每个组件之间都是相互独立的,都有自己的作用域,所以组件之间是不能直接获取数据.在项目开发中一个组件可能需要获取另一个组件的值,我们可以通过其他方法间接的获取.所以,获取的方法有以下几种: ...
- vue 非父子组件之间的传值(Bus/总线/发布订阅模式/观察者模式)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- VUE中的子父组件、兄弟组件之间相互传值,相互调用彼此的方法
vue--组件传值 父组件传值给子组件--"props" 一.父组件--示例 <template> <child :choose-data="choos ...
- vue组件定义方式,vue父子组件间的传值
vue组件定义方式,vue父子组件间的传值 <!DOCTYPE html> <html lang="zh-cn"> <head> <met ...
- Angular获取dom元素,以及父子组建之间相互传值
1.使用原生js代码获取dom元素 在ts文件中有一个ngOnInit()的方法,这个方式是指在模块加载完毕之后并不是dom加载完毕,也就是说如果你的dom元素中使用的angular的指令,然后想在这 ...
随机推荐
- CG-CTF(5)
CG-CTF https://cgctf.nuptsast.com/challenges#Web 续上~ 第二十二题:SQL注入1 点击Source: 分析: mysql_select_db()函数: ...
- 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制
如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: GC.SuppressFinalize(this); ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊. 一 ...
- 对话Roadstar投资人:一家自动驾驶公司之死(三)
...
11. Roadstar 如何收场? 雷锋网:你觉得 Roadstar 造成今天这样的局面,是什么导致的? 投资人代表 1:刚才我们也数次表达了,在每个人身上,可能每个人的诉求,不能达到同步,与公司的 ...
- linux系统单网卡绑定多个IP地址
说明: 单网卡绑定两个IP地址,电信和联通,目的:是为了当电信出故障联通正常使用. 系 统 IP地址 子网掩码 网关 CentOS 6.3_64bit eth0:116.18.176.19 255.2 ...
- Xapian实战(一):环境搭建 + 简介
1. 参考资料 http://xapian.org/docs/install.html Xapian的存储系统.性能以及检索模型等 2. 安装 1) xapian # ./configure --pr ...
- 图论--最长路--基于SPFA的调整模板
#include<iostream> #include<queue> #include<algorithm> #include<set> #includ ...
- P4430 小猴打架、P4981 父子
prufer编码 当然你也可以理解为 Cayley 公式,其实这个公式就是prufer编码经过一步就能推出的 P4430 小猴打架 P4981 父子 这俩题差不多 先说父子,很显然题目就是让你求\(n ...
- python selenium(用例断言)
1.if ...else ...判断进行断言 from time import * from selenium import webdriver "): driver = webdriver ...
- libevhtp初探
libevent的evhttp不适合多线程,libevhtp重新设计了libevent的http API,采用了和memcached类似的多线程模型. worker线程的管道读事件的回调函数为htp_ ...
- 工厂模式(factory pattern)
工厂模式主要用来封装对象的创建,有3种分类:简单工厂(simple factory).工厂方法(factory method).抽象工厂(abstract factory). 简单工厂包括3种组成元素 ...