在组件中用slot插槽可以使组件中添加的内容可改,若直接定义组件,则组件中的内容只能在组件中改动,但是如果用上slot插槽便不同了
如:
<div id="app"> <panel></panel> </div> <template id="panel-tpl"> <div class="panel" style=" 500px;border: 1px solid #999;"> <div class="title" style="padding: 15px;border-bottom: 1px solid #999;">{{title}}</div> <div class="content" style="padding: 15px;">{{content}}</div> <div class="footer" style="padding: 15px; border-top:1px solid #999;">{{footer}}</div> </div> </template>
<script> Vue.component('panel',{ template : '#panel-tpl', data : function(){ return { title : '标题', content : '内容', footer : '底部', }; } }); new Vue({ el : '#app', }); </script>
上面这段代码便只能在组件panel内部改动各部分内容。有了slot我们便可以在外部改动了,若只有一个slot则组件标签中间的内容便是slot标签所在地方的内容
<div id="app"> <panel> {{ content }} </panel> </div> <template id="panel-tpl"> <div class="panel" style=" 500px;border: 1px solid #999;"> <div class="title" style="padding: 15px;border-bottom: 1px solid #999;">{{title}}</div> <div class="content" style="padding: 15px;"> <slot></slot> </div> <div class="footer" style="padding: 15px; border-top:1px solid #999;">{{footer}}</div> </div> </template>
<script> Vue.component('panel',{ template : '#panel-tpl', data : function(){ return { title : '标题', content : '内容', footer : '底部', }; } }); new Vue({ el : '#app', data : { content : '这是外部设置的内容', }, }); </script>
若有多个slot,则要为每个slot设置一个name
<div id="app"> <panel> <div slot='title'>{{title}}</div> <div slot='content'>{{content}}</div> <div slot='footer'>{{footer}}</div> </panel> 输入标题:<input type="text" v-model='title'> 输入内容:<input type="text" v-model='content'> 输入底部:<input type="text" v-model='footer'> </div> <template id="panel-tpl"> <div class="panel" style=" 500px;border: 1px solid #999;"> <div class="title" style="padding: 15px;border-bottom: 1px solid #999;"> <slot name='title'></slot> </div> <div class="content" style="padding: 15px;"> <slot name='content'></slot> </div> <div class="footer" style="padding: 15px; border-top:1px solid #999;"> <slot name='footer'></slot> </div> </div> </template>
<script> Vue.component('panel',{ template : '#panel-tpl', }); new Vue({ el : '#app', data : { title : '这是外部设置的标题', content : '这是外部设置的内容', footer : '这是外部设置的底部', }, }); </script>
上面这段代码可以通过input输入框动态的改变组件panel中的内容。