slot---组件内容分发

<!-- <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单插槽(Single-Slot)</title>
</head>
<body>
    <div id="example">
        <parent-com></parent-com>
    </div>
    <template id='parent-com'>
      <div>
              <h1>I'm the parent title</h1>
              <child-com>
               <p>
                我是在父组件的内容,写在子组件的标签内,将会自动传入子组件模板中的slot
                </p>
             </child-com>
        </div>
    </template>
    <template id='child-com'>
        <div>
          <h2>I'm the child title</h2>
          <slot>
            没有slot注入时,这段文字才会被显示。
          </slot>
        </div>
    </template>
</body>
<script type="text/javascript" src="js/Vue.js"></script>
<script type="text/javascript">
    Vue.component('parent-com', {
      template: '#parent-com'
    });
    Vue.component('child-com', {
      template: '#child-com'
    });
    new Vue({
      el: '#example'
    });

    //写parent-com的时候,写到了<child-com></child-com>,本来child-com标签之间是不应该写内容的,因为内容是内部模板渲染出来的。但是如果你写了,这些html内容将会当做参数传入child-com内部定义有slot的地方。
</script>
</html> -->



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>命名插槽</title>
</head>
<body>
    <div id="example">
      <parent-com></parent-com>
    </div>
    <template id='parent-com'>
        <div>
          <h1>I'm the parent title</h1>
          <child-com>
                <h1 slot="header">Here might be a page title</h1>
                <p>A paragraph for the main content.</p>
                <p>And another one.</p>
                <p slot="footer">Here's some contact info</p>
          </child-com>
        </div>
    </template>

    <template id="child-com">
        <div class="container">
            <header>
                <slot></slot>
            </header>
            <main>
                <slot></slot>
            </main>
            <footer>
                <slot  name="footer"></slot>
            </footer>
        </div>
    </template>
</body>
<script type="text/javascript" src="js/Vue.js"></script>
<script type="text/javascript">
    Vue.component('parent-com', {
      template: '#parent-com'
     });
     
     Vue.component('child-com', {
      template: '#child-com'
     });

    new Vue({
      el: '#example'
    });
</script>
</html>



二次视频学习:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>slot内置组件</title>
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript" src="js/jquery-3.2.1.js"></script>
</head>
<body>
    <div id="app">
        <caicai>
            <span slot="url">{{caiData.url}}</span>  <!--  在组件标签里传递值-->
            <span slot="netName">{{caiData.netName}}</span>
            <span slot="skill">{{caiData.skill}}</span>
        </caicai>
    </div>
    <template id="tep">
        <div>
            <p>地址:<slot name="url"></slot></p> <!--在模版里  用slot 标签接收值-->
            <p>网名:<slot name="netName"></slot></p>
            <p>技术类型:<slot name="skill"></slot></p>
        </div>
        
    </template>
</body>
<script type="text/javascript">
    var jinsuo={  //组件模版变量
        template:"#tep"  //模版  定义在 id为tep 的html的tempalte标签里 
    }
    var app=new Vue({
            el:"#app",
            data:{
                caiData:{  //  数据对象
                    url:"http://baidu.com",
                    netName:"菜菜",
                    skill:"web前端"
                }
            },
            components:{  //组件
                "caicai":jinsuo  //caicai  组件名  jinsuo  是组件模版
            }
        })
</script>
</html>




原文地址:https://www.cnblogs.com/jinsuo/p/7695989.html