Vue组件化开发

本文详细介绍了Vue组件化开发,包括组件注册(全局与局部)、组件通信(父组件向子组件传值、非props属性、$listeners、子组件给父组件传值、组件与v-model)、非父子组件传值(EventBus、$root、$refs)、组件插槽(单个、具名、作用域)以及内置组件(动态组件、keep-alive、transition、transition-group)的使用。通过组件化,可以提高代码复用性和可维护性。
摘要由CSDN通过智能技术生成

组件化开发

组件用于封装页面的部分功能,将功能的结构、样式、逻辑代码封装起来,提高功能否对复用性和可维护性,更专注业务逻辑的开发。

组件注册

组件本质上时可复用的Vue实例,可以与new Vue接收相同的选项,例如data、methods以及生命周期钩子等。

命名规则:用 - 连接或者pascalCase命名法
调用规则:必须使用 - 连接,标签内部不区分大小写

全局注册

可以用于任意实例或组件中,必须创建于根Vue实例创建之前 Vue.component('组件名',{选项对象})

  <div id="app">
   <my-component></my-component> 
  </div>
  <script>
	Vue.component('my-component',{
     
		template:<div>全局注册组件</div>
	})
	Vue.component('MyComB',{
     
		template:
	})
	new Vue({
     
		el:'#app',
		data:{
     
		 }
	})
  </script>

组件基础

template选项

用于设置组件的结构。只能有一个根元素

<div id='#app'>
<my-complate></my-complate>
</div>
<script>
Vue.component('MyComplate',{
     	//全局注册组件
	template:'<div>组件A的内容{
     {1+9*2}}</div>'	
//	template:'<div><p>组件A</p>/div>'		//可以书写
//	template:'<div>组件</div> <div></div>'		//不可书写,只可使用一个根元素
})
new Vue({
     
	el:'#app',
	data:{
     }
})
</script>
data选项

数据绑定操作,只能将data中的数据放到方法中传入,为了使每次调用组件时不同调用位置实例相互独立。为实例设置作用域。

<div id='#app'>
	<My-COmA><My-ComA>
</div>
<script>
	Vue.component('MyComA',{
     
	 	template:'<div>{
     {
     title}}</div>
					<p>{
     {
     content}}</p>`
		data() {
     
		  return {
     
		  	title:'组件标题'
		  	content:'组件内容'
		  	}
		 }
	 })
</script>

局部注册

在实例化的Vue对象中添加components属性,将组件名以对象的方式添加到componsents属性中,data方法设置在components对象中以函数调用的形式书写

<div id = '#app'>
<my-com-a><my-com-a>
</div>
<script>
	new Vue({
     
		el:'app',
		data:{
     }
		components:{
     
		 	'my-com-a':{
     
		 	template:`<div><h3>{
      {title}}</h3><p>{
      {content}}</p></div>`,
			data(){
     
				return{
     title:'组件标题',
					   content:'组件内容'
					   }
				}
			}
		 } 
	})
</script>

可以将数据提取出来单独设置选项对象,结合ES6新语法设置对象属性和对象值相同书写一个即可

<div id = '#app'>

</div>
<script>
	var MyComponentA = {
     
      template: `
        <div>
          <h3>{
      { title }}</h3>
          <p>{
      { content }}</p>
        </div>
      `,
      data () {
     
        return {
     
          title: '组件 A 标题',
          content: '组件 A 内容'
        }
      }
    };
	var componentB = ({
     
	  template:` <div>
          <h3>{
      { title }}</h3>
          <p>{
      { content }}</p>
        </div>
      `,
      data () {
     
        return {
     
          title: '组件 B',
          content: '组件 B 内容'
        }
      }
	 })
	new Vue({
     
	 	el:'#app'
	 	data(){
     
	 	}
	 	comonents:{
     
	 	 'my-component-a':componentA,
	 	 compontentB
	 	 }
	 })
</script>

组件通信

父组件向子组件传参值

父组件给子组件传值过程中用到props属性,采用驼峰命名法 ,父组件绑定时使用 - 连接,标签中不区分大小写无法识别props。不要与data存在同名属性。引用data中的值时无需将data设置为方法

<div id="app">
    <!-- 静态属性设置 -->
    <my-component-a  my-title="这是静态的标题" my-content="这是静态的内容"></my-component-a>
    <!-- 动态属性绑定 -->
    <my-component-a v-bind:my-title="'这是静态的标题,这是演示'" :my-content="'这是静态内容'"></my-component-a>
    <!-- 动态属性绑定:常用操作 -->
    <my-component-a :my-title="item.title":my-content="item.content" ></my-component-a>
  </div>
  <script>
    // 创建子组件
    Vue.component('my-component-a', {
      props: ['myTitle', 'myContent'],
      template: `
        <div>
          <h3>{
  { myTitle }}</h3>
          <p>{
  { myContent }}</p>
        </div>
      `
    });
    new Vue({
      el: '#app',
      data: {
        item: {
          title: '这是示例标题',
          content: '这是示例内容'
        }
      }
    });

所有的prop属性都是单向下行绑定的。父组件可以传给子组件中时父组件的变化可以更新到子组件,但子组件的变化不会被父组件更新,如果子组件需要更改处理父组件传入的数据 ,应存到data中。父组件给子组件传入的时一个对象时,子组件更新后父组件也会被修改。父组件给子组件传值是使用prop方式的同时,还需要绑定要传输的数据

<div id="app">
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值