VueDay03动态组件,插槽的运用

在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的 attribute。

下面是简单的一个插槽的实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			
			<alert-com :html='content'></alert-com>
			<!-- slot里面的内容变量只跟父元素有关 -->
			<alert-com1>
				<p>小心我,{{content}}</p>
			</alert-com1>
		</div>
		<script type="text/javascript">
			Vue.component('alert-com',{
				props:['html'],
				template:`
				<div class="alert">
					<h1>温馨提示</h1>
				    <div class="content">
						{{html}}
					</div>
				</div>
				`
			})
			
			Vue.component('alert-com1',{
				template:`
				<div class="alert">
					<h1>温馨提示</h1>
				    <div class="content">
					     <slot></slot>
					</div>
				</div>
				`,
				data:function(){
					return{
						abc:"abc123"
					}
				}
			})
			let app = new Vue({
				el:"#app",
				data:{
					content:"小心熊出没"
				}
			})
		</script>
	</body>
</html>

  

动态组件的实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript">
			
		</script>
	</head>
	<body>
		<div id="app">
			<div id="content">
				<component :is="com"></component>
			</div>
			<button @click="chooseContent(1)">首页</button>
			<button @click="chooseContent(2)">列表页</button>
			<button @click="chooseContent(3)">新闻</button>
			<button @click="chooseContent(4)">个人</button>
		</div>
		<script type="text/x-template" id="hello-world-template">
			<div>
			<h1>首页内容</h1>
		  <p>Hello hello hello vue</p>
		  </div>
		</script>
		<script type="text/javascript">
			let com1 = Vue.component("index-com",{
				name:'index',
				template:'#hello-world-template'
			})
			let com2 = Vue.component("list-com",{
				template:`
				<h1>列表内容</h1>
				`
			})
			let com3 = Vue.component("news-com",{
				template:`
				<h1>新闻内容</h1>
				`
			})
			let com4 = Vue.component("me-com",{
				template:`
				<h1>个人中心内容</h1>
				`
			})
			let app =new Vue({
				el:"#app",
				data:{
					com:com1
				},
				methods:{
					chooseContent:function(id){
						console.log(id)
						console.log(this)
						// 通过获取ID选择注册好的组件,实现动态内容渲染
						this.com = this.$options.components['com'+id]
					}
				},
				components:{
					com1,com2,com3,com4
				}
			})
		</script>
	</body>
</html>

  

 

posted @ 2020-10-11 09:14  peifengyang  阅读(404)  评论(0编辑  收藏  举报