Vue笔记5:slot(留坑插槽)

匿名的slot 用法

  • slot其实就是父组件传递的DOM结构
  • vue 提供的内置组件 <slot></slot>

slot动态的DOM, props是动态的数据

<!DOCTYPE html>
<html>
<head>
    <title>slot</title>
    <style type="text/css">
        li {
            list-style: none;
            float: left;
            width: 33%;
            background-color: yellowgreen;
            border: 1px solid black;
            height: 150px;
        }
    </style>
</head>
<body>
    <div id="app"></div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.js"></script>
    <script type="text/javascript">

        //定义全局组件MyLi
        // slot 是留坑,外部插入html内容
        var MyLi = {
            template:`<li>
                <slot></slot>
            </li>`,
        };

        Vue.component('my-li',MyLi);

        //总结:slot其实就是父组件传递的DOM结构
        // vue 提供的内置组件 <slot></slot>
        // <my-li> <button>xxxx</button></my-li>

        //入口组件:实现一个九宫格
        var App = {
            template:`
                <div>
                    <ul>
                        <my-li><h2>111</h2></my-li>
                        <my-li><button>2222</button></my-li>
                        <my-li>3</my-li>
                        <my-li>4</my-li>
                        <my-li><button>5555</button></my-li>
                        <my-li>6</my-li>
                        <my-li><h1>7777</h1></my-li>
                        <my-li>8</my-li>
                        <my-li><button>9999</button></my-li>
                    </ul>
                </div>
            `,
            data:function(){
                return {
                    myText:'',
                }
            },
            
        };

            new Vue({
                el:'#app',
                components:{
                    app:App,
                },
                template:'<app/>'
            });
    </script>
</body>
</html>

带名称的slot 用法

代码示例:

<!DOCTYPE html>
<html>
<head>
    <title>带名称的slot</title>
    <style type="text/css">
        /*li {
            list-style: none;
            float: left;
            width: 33%;
            background-color: yellowgreen;
            border: 1px solid black;
            height: 150px;
        }*/
    </style>
</head>
<body>
    <div id="app"></div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.js"></script>
    <script type="text/javascript">

        //定义全局组件MyLi
        // slot 是留坑,外部插入html内容
        var MySlot = {
            template:`<div>
                <slot name = 'one'></slot>
                <hr>
                <slot name = 'two'></slot>
            </div>`,
        };

        Vue.component('my-slot',MySlot);

        //总结:slot其它就是父组件传递的DOM结构
        // vue 提供的内置组件 <slot></slot>

        //入口组件:实现一个九宫格
        var App = {
            template:`
                <div>
                    <my-slot>
                        <h1 slot="one">第一个槽</h1>
                        <h2 slot="two">第二个槽</h2>
                    </my-slot>
                </div>
            `,
            data:function(){
                return {
                    myText:'',
                }
            },
            
        };

            new Vue({
                el:'#app',
                components:{
                    app:App,
                },
                template:'<app/>'
            });
    </script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容