021_Vue插槽

1. 插槽

1.1. 父组件向子组件传递内容

1.2. 插槽位置  

Vue.component('alert-box', {
	template: `
		<div>
			<strong>ERROR:</strong>
			<slot>默认内容</slot>
		</div>
	`
});

1.3. 插槽内容 

<div id="app">
	<alert-box>有bug发生</alert-box>
	<alert-box>有一个警告</alert-box>
	<alert-box></alert-box>
</div>

1.4. 代码 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>插槽</title>
	</head>
	<body>
		<div id="app">
			<alert-box>有bug发生</alert-box>
    		<alert-box>有一个警告</alert-box>
    		<alert-box></alert-box>
		</div>
		
		<script type="text/javascript" src="vue.min.js"></script>
		<script type="text/javascript">
	      	// 组件插槽: 父组件向子组件传递内容
	    	Vue.component('alert-box', {
	      		template: `
	        		<div>
	          			<strong>ERROR:</strong>
	          			<slot>默认内容</slot>
	        		</div>
	      		`
	    	});

			var vm = new Vue({
				el: "#app"
			});
		</script>
	</body>
</html>

1.5. 效果图

2. 具名插槽

2.1. 具名插槽用法

 2.2. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>具名插槽</title>
	</head>
	<body>
		<div id="app">
			<base-layout>
      			<p slot='header'>标题信息</p>
      			<p>主要内容1</p>
      			<p>主要内容2</p>
      			<p slot='footer'>底部信息信息</p>
    		</base-layout>

    		<hr />

    		<base-layout>
    			<!-- slot='header'使用在<template>标签中, 就可以包括多个内容 -->
      			<template slot='header'>
        			<p>标题信息1</p>
        			<p>标题信息2</p>
      			</template>
		      	<p>主要内容1</p>
		      	<p>主要内容2</p>
      			<template slot='footer'>
        			<p>底部信息信息1</p>
        			<p>底部信息信息2</p>
      			</template>
    		</base-layout>
		</div>
		
		<script type="text/javascript" src="vue.min.js"></script>
		<script type="text/javascript">
			Vue.component('base-layout', {
	      		template: `
	        		<div>
	          			<header><slot name='header'></slot></header>
	          			<main><slot></slot></main>
	          			<footer><slot name='footer'></slot></footer>
	        		</div>
	      		`
	    	});

			var vm = new Vue({
				el: "#app"
			});
		</script>
	</body>
</html>

2.3. 效果图

3. 作用域插槽

3.1. 作用域插槽应用场景: 父组件对子组件的内容进行加工。

3.2. 作用域插槽用法

3.3. 代码 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>作用域插槽</title>

		<style type="text/css">
			.current {
				font-weight: bold;
				color: green;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<book-list :list='books'>
      			<template slot-scope='slotProps'>
        			<span v-if='slotProps.index==3' class="current">{{slotProps.item}}</span>
        			<span v-else>{{slotProps.item}}</span>
      			</template>
    		</book-list>
		</div>
		
		<script type="text/javascript" src="vue.min.js"></script>
		<script type="text/javascript">
			Vue.component('book-list', {
				props: ['list'],
	      		template: `
	        		<div>
	          			<li :key='index' v-for='(item, index) in list'>
	          				<slot :index='index' :item='item'></slot>
	          			</li>
	        		</div>
	      		`
	    	});

			var vm = new Vue({
				el: "#app",
				data: {
					books: ["JavaScript DOM编程艺术", "高性能JavaScript", "javascript高级程序设计", "JavaScript权威指南"]
				}
			});
		</script>
	</body>
</html>

3.4. 效果图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值