vue组件之间的传参

  • Post author:
  • Post category:vue


一、组件之间的传参:

1.父组件传子组件:通过props

2.子组件传父组件:自定义事件

父组件:vue实例;

子组件:<my-button></my-button>

<my-button></my-button>是放在vue实例挂载点的内部

二、父组件传子组件

    <body>
		<div id="app">
			<h1>时间戳:{{dt}}</h1>
			<!-- 使用全局组件 -->
			<my-button :name="myname"></my-button>
		</div>
		
	</body>
	<script type="text/javascript">
		//定义全局组件component;页面/vue实例
		//命名;短横杆,驼峰,帕斯卡
		Vue.component('my-button',{
			template:'<div>{{msg}}<button @click="fa">全局组件按钮</button><br>name={{name}}</div>',//有且只有一个跟标签
			props:['name','sex','age'],
			data(){
				return{
					msg:'全局组件测试'
				}
			},methods:{
				fa(){
					console.log("父组组件传来的参数name:",this.name);
				}
			}
		});
		//创建vue实例
		vm = new Vue({
			el:'#app',
			data:{
				dt:new Date().getTime(),
				myname:'李四'
			},
			methods:{
				
			},
			//局部组件
			components:{
				'my-input':{
					template:'<div><input/></div>',
					data(){
						
					},methods:{
						
					}
				},
			}
		});
	</script>

三、子组件传父组件

    <body>
		<div id="app">
			<h1>时间戳:{{dt}}</h1>
			<!-- 使用全局组件 -->
			<my-button :name="myname" @threeclick='funParent'></my-button>
		</div>
		
	</body>
	<script type="text/javascript">
		//定义全局组件component;页面/vue实例
		//命名;短横杆,驼峰,帕斯卡
		Vue.component('my-button',{
			template:'<div>{{msg}}<button @click="doClick2">全局组件按钮</button><br>name={{name}}</div>',//有且只有一个跟标签
			props:['name','sex','age'],
			data(){
				return{
					msg:'全局组件测试',
					count:0,
					arg:'子组件的参数'
				}
			},methods:{
				fa(){
					console.log("父组组件传来的参数name:",this.name);
				},
				doClick(){
					//该事件的触发条件就是doClick被执行
					this.$emit('dj');
				},
				doClick2(){
					this.count++;
					//鼠标三击事件
					if(this.count % 3 == 0){
						this.$emit('threeclick',this.arg);
					}
				}
			}
		});
		//创建vue实例
		vm = new Vue({
			el:'#app',
			data:{
				dt:new Date().getTime(),
				myname:'李四'
			},
			methods:{
				//触发子组件的自定义事件的时候调用该方法
				//在父组件触发子组件自定义事件的时候,子组件所传来过来的参数
				funParent(e){
					console.log("触发子组件的自定义事件dj,参数:%s",e);
				}
			},
			//局部组件
			components:{
				'my-input':{
					template:'<div><input/></div>',
					data(){
						
					},methods:{
						
					}
				},
			}
		});
	</script>



版权声明:本文为weixin_62322136原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。