首页 > 技术文章 > Vue父子组件之间传值

jianghaijun4031 2019-06-21 13:43 原文

组件分两种,全局组件和局部组件

全局组件这么写

Vue.component("nav-bar",{
	props:['navShow',"elecText","mainText","isIos"],
	// props这个里边的值是用来使用他的父组件给他传参数的.什么类型都可以传,
	// 但是对象和数组传过来,都是指向父组件的,所以如果你改变了这个组件内的的值,也会影响到父组件,这种事最好不要发生!!
	// 在主组件调用时使用这种  nav-show="something"  首先要注意这个格式,
	// 二就是相当于给这个组件弄了个属性,引用时相当于给属性赋值
	data:function(){

		return {
			// couter:"正在加载资源..."
			// 必须加个return一个对象的方式定义data,主要是保证状态不受影响
		}
	},
	template:'<div  class="navBar" :class="{blank:isIos}">'+
				'<div v-show="navShow" @click="backHasClick" class="navBarLeft">'+
					'<span class="fa fa-angle-left"></span>'+
				'</div>'+
				'<div class="navBarCenter">{{matchN(mainText)}}</div>'+
				'<div class="elecV">{{elecText}}</div>'+
			'</div>',
			// 这个组件内容了,要保证有一个主容器包裹,写法就是简单的语法了
	methods:{
		backHasClick:function(){
			this.$emit("backclick");
			// 自定义事件backclick;当触发这个函数的时候,就触发这个事件.在父组件监听这个事件就ok
		}
		
	},
	computed:{
		matchN:function(val){
			return val.replace(/\\n/,' \n ');
			
		}
	},
	mounted:function() {
		// 每个组件都有自己的生命周期..so.还有beforCreated created等等,如果忘了直接百度vue的生命周期
	}
})

主组件调用他

<div id="app">
	<nav-bar :is-ios="isiOS" :main-text="mainText" :elec-text="elecText" :nav-show="navBarShows" @backclick="backEventHandle"></nav-bar>
</div>
<!--
说明::is-ios="isiOS" 动态传参,
 -->

彻底的子组件写法

var App=new Vue({
	el:"#app",
	data:{
		msg:"hello world",
		types:"text",
		active:false
	},
	components:{
		"my-componemt":{
		   // 这一部分可以单拿出来写
		   template:"<div>{{child}}</div>",
		   data:{
			 return {
				child:"文字"
			 }
		   }
	    }
	}
})

从这一点上就不难看出组件可以套组件套很多层。

从开发角度看,就是常用的那些就都注册成全局组件,不常用只属于某个组件就注册成子组件

 

推荐阅读