zoukankan      html  css  js  c++  java
  • 子父组件通信


    categories:

    • vue基础
      tags:
    • 子父组件通信
    • props

    子父组件通信

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>vue组件prop通信</title>
    </head>
    <body>
    	<div id="app"></div>
    	<script src="./vue.js"></script>
    	<script>
    		// 子传父
    		// 1.在父组件中绑定自定义的事件
    		// 2.在子组件中触发原生的事件,在函数中使用自定义的$emit触发自定义的 childHandler
    
    		Vue.component("Child",{
    			props: {
    				giveChildData:{
    					type:String
    				}
    			},
    			data(){
    				return {
    					childData:this.giveChildData
    				};
    			},
    			template:`
    			<div>
    				<p>我是一个子组件{{giveChildData}}</p>
    				<input type="text" v-model = 'childData' @input='changeValue(childData)' />
    			</div>
    			`,
    			methods:{
    				changeValue(val){
    					// 自定义的事件一定要通过$emit去触发
    					// $emit(自定义的事件名,消息)
    					this.$emit('childHandler',val);
    
    				}
    			}
    
    		});
    		// 定义全部组件
    		Vue.component('Vbtn',{
    			template:`
    			<button>按钮</button>
    			`
    		});
    
    		// 定义父组件
    		// 父传子
    		// 1.父子组件通信,先给父组件绑定自定义的属性
    		// 2.在子组件中使用props接收父组件传递的数据
    		// 3.可以在子组件中任意使用
    		Vue.component("Parent",{
    			data(){
    				return {
    					msg: '我是父组件中的数据',
    				};
    			},
    			template:`
    			<div>
    				<p>我是一个父组件</p>
    				<p>{{msg}}</p>
    				<Child :giveChildData='msg' @childHandler='child_handler'/>
    			</div>
    			`,
    			methods:{
    				child_handler(val){
    					console.log(val);
    					// this.msg = val;
    				}
    			}
    		});
    
    
    		// 定义局部组件
    		var Header = {
    			data(){
    				return {}
    			},
    			template:`
    			<div>
    			我是头部组件
    			</div>
    			`
    		};
    		var Content = {
    			data(){
    				return {}
    			},
    			template:`
    			<div>
    			我是内容组件
    			</div>
    			`
    		};
    		var Slider = {
    			data(){
    				return {};
    			},
    			template:`
    			<div>
    			<Parent/>
    			我是底部组件
    			<Vbtn/>
    			</div>
    			`
    		}
    		var App = new Vue({
    			el:'#app',
    			data(){
    				return {}
    			},
    			components:{
    				Header,
    				Content,
    				Slider,
    			},
    			template:`
    			<div>
    				<Header/>
    				<Content/>
    				<Slider/>
    			</div>
    			`
    		})
    
    	</script>
    </body>
    </html>
    
  • 相关阅读:
    模块模式——属性
    防止变量被覆盖
    自执行匿名函数语法和普通函数语法对比
    JavaScript更改原型
    JavaScript覆盖原型以及更改原型
    JavaScript原型链
    作用域链和原型链描述javaScript访问变量和属性的顺序
    javascript高级变量提升和执行环境对象
    构建第一个单页应用
    error: expected identifier before numeric constant 问题
  • 原文地址:https://www.cnblogs.com/anyux/p/12202147.html
Copyright © 2011-2022 走看看