VUE的slot插槽和ref、$parent

概述

- #### slot插槽

 

  - #### slot就是子组件里给DOM留下的坑位

 

  - #### <子组件>DOM</子组件>

 

  - #### slot是动态的DOM

 

- #### ref获取子组件实例

 

  - #### 识别:在子组件或元素上使用属性ref="xxxx"

 

  - #### 获取:this.$refs.xxxx 获取元素

 

  - #### $el 是拿其DOM

 

- #### $parent获取父组件实例(可在子组件直接使用this.$parent即可)

slot插槽

代码

<!DOCTYPE html>

<html>

<head>

    <title>组件化开发</title>

</head>

<body>

    <div id="app">

      

    </div>



    <script type="text/javascript" src="vue.js"></script>

    <script type="text/javascript">

       var Parent={

           template:`

              <div>

              我是父组件

              <slot name='hello'></slot>

              </div>

           `,

       }

      

       new Vue({

           el:'#app',

           components:{

              Parent

           },

           template:`

              <div>

                  <parent>

                     <div slot='hello'>我是插槽内容</div>

                     <div slot='hello'>我是插槽内容2</div>

                  </parent>

              </div>

           `,

           data(){

              return{}

           },

       })

    </script>

</body>

</html>

运行效果

我是父组件

我是插槽内容

我是插槽内容2 

子组件

代码

<!DOCTYPE html>
<html>
<head>
	<title>组件化开发</title>
</head>
<body>
	<div id="app">
		
	</div>

	<script type="text/javascript" src="vue.js"></script>
	<script type="text/javascript">
		var Child={
			template:`
				<div>我是子组件</div>
			`,

		}
		var Parent={
			template:`
				<div>
				我是父组件
				<slot name='hello'></slot>
				<child ></child>
				</div>
			`,
			components:{
				Child
			}
		}
		
		new Vue({
			el:'#app',
			components:{
				Parent
			},
			template:`
				<div>
					<parent>
						<div>我是插槽内容</div>
						<div slot='hello'>我是插槽内容2</div>
					</parent>
				</div>
			`,
			data(){
				return{}
			},
		})
	</script>
</body>
</html>

 

运行效果

我是父组件

我是插槽内容2

我是子组件

ref、$parent

代码


<!DOCTYPE html>

<html>

<head>

    <title>组件化开发</title>

</head>

<body>

    <div id="app">

      

    </div>



    <script type="text/javascript" src="vue.js"></script>

    <script type="text/javascript">

       var Child={

           template:`

              <div>我是子组件</div>

           `,

           data(){

              return {

                  msg:'hello'

              }

           },

           created(){

              //数据加载完成 子组件钩子

              console.log(this.$parent)

              console.log(this.$parent.parents)



           }



       }

       var Parent={

           template:`

              <div>

              我是父组件

              <slot name='hello'></slot>

              <child ref='childs'></child>

              </div>

           `,

           components:{

              Child

           },

           data(){

              return {

                  parents:'我是父组件'



              }

           },

           mounted(){

              // dom渲染完成 父组件钩子

               console.log(this.$refs.childs)

               console.log(this.$refs.childs.$el)

               console.log(this.$refs.childs.msg)

           }

       }

      

       new Vue({

           el:'#app',

           components:{

              Parent

           },

           template:`

               <div>

                  <parent>

                     <div>我是插槽内容</div>

                     <div slot='hello'>我是插槽内容2</div>

                  </parent>

              </div>

           `,

           data(){

              return{}

           },

       })

    </script>

</body>

</html>

运行效果

我是父组件

我是插槽内容2

我是子组件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值