@[TOC](Vue 入门之浅谈插槽slot(一)插槽的简单使用)
Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 元素作为承载分发内容的出口。 https://cn.vuejs.org/v2/guide/components-slots.html
创建Vue/Cli项目
vue creat slot根据项目需求配置所需插件
清空App.vue文件,删除HelloWorld.vue
新建Temp.vue
在Temp.vue写一个简单的vue模板
<template> <div id="temp"> {{msg}} </div> </template> <script> export default { props:["msg"], data(){ return { } } } </script> <style> #temp{ border: 1px solid #ccc; width: 80%; height: 40px; margin-top: 20px; } </style>在App.vue中引入Temp并作为子组件使用
<template> <div id="app"> <app-temp :msg="msg" /> </div> </template> <script> import Temp from "./components/Temp" export default { name: 'app', components: { "app-temp":Temp }, data(){ return { msg:"hello app" } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; } #app span{ color: aqua; } </style>此时只是简单的父组件向子组件传值跟slot并无关系,页面显示如下
如果我们向向子组件传递HTML代码的话props是无法实现的就需要用到slot
将页面结构做一下修改
App.vue
<template> <div id="app"> <app-temp> <span>{{msg}}</span> </app-temp> </div> </template> <script> import Temp from "./components/Temp" export default { name: 'app', components: { "app-temp":Temp }, data(){ return { msg:"hello app" } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; } /* #app span{ color: aqua; } */ </style>Temp.vue
<template> <div id="temp"> <slot></slot> </div> </template> <script> export default { data(){ return { } } } </script> <style> #temp{ border: 1px solid #ccc; width: 80%; height: 40px; margin-top: 20px; } </style> 此时页面显示如下 此时hello app并不是直接显示在#temp下而是将嵌套在span标签内