Vue组件

01.组件的基本使用

组件:前端模块化、工程化的基础。把前端页面分成一个一个的小模块。这些小模块就称为组件

组件使用:

  • 使用占位符 英文即可。不能和标签名字一致,一般需要有语义
  • 定义组件 let 组件名=Vue.extend({})
  • 定义模板 书写所要渲染的标签
  • 挂载组件 相当于把模板和组件联系起来
	<body>
		<div id="app">
		<!-- 占位符 -->
			<v-header></v-header>
			<v-nav></v-nav>
		</div>
		<script src="js/vue.js"></script>
		<script>
			var vheader=Vue.extend({
				// 定义模板
				template:'<h1 @click="change()">{{msg}}</h1>',
				// 组件内部有自己的数据,必须使用函数的形式表示
				data(){
					return {
						msg:'这是头部'
					}
				},
				methods:{
					change(){
						this.msg+=1;
					}
				}

			})
			var vnav=Vue.extend({
				template:'<h1>这是导航</h1>'
			})
			new Vue({
				el:'#app',
				//挂载组件
				components:{
					'v-header':vheader,
					'v-nav':vnav
				}
			})
		</script>
	</body>

在这里插入图片描述

定义组件的第二种方式:去掉Vue.extend()

var vnav={
	template:'<h1>这是导航</h1>'
}

定义组件的第三种(最常用)方式:

<body>
    <div id="app">
    <!--占位符-->
        <v-head></v-head>
        <v-body></v-body>
    </div>    
    <template id="head">
    <!--定义模板-->
        <div id="box">
            <h1>标题</h1>
            <p>{{msg}}</p>
        </div>
    </template>
    <template id="body">
        <div id="con">
            <div>
                <p>内容</p>
            </div>
        </div>
    </template>
    <script src="js/vue.js"></script>
    <script>
    //定义组件
        let vhead={
        //模板已经定义好,可以直接使用id名
            template:'#head',
            data(){
                return {
                    msg:'这是一个标题'
                }
            }
        }
        let vbody={
            template:'#body'
        }
        new Vue({
            el:"#app",
            //挂载组件
            components:{
                'v-head':vhead,
                'v-body':vbody
            }
        })
    </script>
</body>

在这里插入图片描述

注意事项:

  • 定义模板的时候需要使用template包裹
  • template内部只能有一个根元素

02.slot

slot插槽:在模板中保留位置,使用的时候可以根据具体情况扩展
slot标签需要取name值,占位符需要取slot值,两值必须相等

slot应用:渲染不同的内容

<body>
    <div id="app">
    	 <!--不同的标题使用一个模板渲染-->
    	 <!-- v-head里slot="值"要和template里name="值"相等  -->
        <v-head>
            <h2 slot="title">首页</h2>
        </v-head>
        <v-head>
            <h2 slot="title">推荐</h2>
            <span slot="tuijian">推荐新闻</span>
        </v-head>
        <v-head>
            <h2 slot="title">新闻</h2>
        </v-head>
        <v-head>
            <h2 slot="title">娱乐</h2>
        </v-head>
    </div>
    <template id="head">
        <main>
            <slot name="title"></slot>
            <span>logo</span>
            <!--扩展一段内容-->
            <slot name="tuijian"></slot>
            <span>签到</span>
            <span>菜单</span>
        </main>
    </template>

    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:"#app",
            components:{
                'v-head':{
                    template:'#head'
                }
            }
        })
    </script>
</body>

在这里插入图片描述

03.动态组件

应用:分类页面

<body>
	<div id="app">
		<ul>
			<li @click="msg='woman'" :class="{current:msg=='woman'}">女装</li>
			<li @click="msg='man'" :class="{current:msg=='man'}">男装</li>
		</ul>
		<component :is="msg"></component>
	</div>
	<template id="woman">
		<h1>这是女装</h1>
	</template>
	<template id="man">
		<h1>这是男装</h1>
	</template>
	<script src="js/vue.js"></script>
	<script>
		new Vue({
			el:"#app",
			data:{
				msg:'woman'
			},
			components:{
				'woman':{
					template:'#woman'
				},
				'man':{
					template:'#man'
				}
			}
		})
	</script>
</body>

在这里插入图片描述
在这里插入图片描述

component是一个动态的占位符。最终渲染的占位符由msg的值决定 ,msg的值是什么,占位符就是什么
通过msg的值来改变占位符的名称,通过改变占位符的名称来改变模板,实现渲染不同的内容

2021.01.28 23:43

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值