vue基础之插槽


-categories:

  • vue基础
    tags:
  • 插槽
  • element ui

插槽

slot 插槽 vue内置组件 做为承载分发内容的出口

普通插槽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插槽使用</title>
</head>
<body>
<div id="app"></div>
<script src="./vue.js"></script>
<script>
    // 全局组件
    // 第一个参数是组件名,第二个参数是options
    Vue.component('Vbtn', {
        <!-- slot 插槽 vue内置组件 做为承载分发内容的出口 -->
        template: `
                <button>
                <slot></slot>
</button>
            `
    });
    // 
    var Header = {
        data() {
            return {}
        },
        template: `
            <div>我是头部组件</div>
            `
    };
    var Vcontent = {
        data() {
            return {}
        },
        template: `
            <div>我是内容组件
            <Vbtn>登录</Vbtn>
            <Vbtn>注册</Vbtn>
            <Vbtn>123</Vbtn>
            </div>
            `
    };
    var Slider = {
        data() {
            return {}
        },
        template: `
            <div>我是侧边栏</div>
            `
    }
    var App = new Vue({
        el: '#app',
        data() {
            return {}
        },
        components: {
            Header,
            Vcontent,
            Slider
        },
        template:
            `
            <div>
            <Header></Header>
            <Vcontent></Vcontent>
            <Slider></Slider>
            </div>
            `
    })
</script>
</body>
</html>

插槽 + elementUI

点击element,获取相应按钮样式的代码,写入到style中,并使用插槽调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插槽使用</title>
    <style>
/*      设置默认样式*/
        .default{
            display: inline-block;
            line-height: 1;
            white-space: nowrap;
            cursor: pointer;
            background: #fff;
            border: 1px solid #dcdfe6;
            color: #606266;
            -webkit-appearance: none;
            text-align: center;
            box-sizing: border-box;
            outline: none;
            margin: 0;
            transition: .1s;
            font-weight: 500;
            -moz-user-select: none;
            -webkit-user-select: none;
            -ms-user-select: none;
            padding: 12px 20px;
            font-size: 14px;
            border-radius: 4px;
        }
        .primary{
            color: #fff;
            background-color: #409eff;
            border-color: #409eff;
        }
        .success{
            color: #fff;
            background-color: #67c23a;
            border-color: #67c23a;
        }
    </style>
</head>
<body>
<div id="app"></div>
<script src="./vue.js"></script>
<script>
    // 全局组件
    // 第一个参数是组件名,第二个参数是options
    Vue.component('Vbtn', {
        <!-- slot 插槽 vue内置组件 做为承载分发内容的出口 -->
        template: `
                <button class="default" :class="btntype">
                <slot></slot>
                </button>
            `,
        props:{
            btntype:{
                type:String,
            },
        }
    });
    //
    var Header = {
        data() {
            return {}
        },
        template: `
            <div>我是头部组件</div>
            `
    };
    var Vcontent = {
        data() {
            return {}
        },
        template: `
            <div>我是内容组件
            <Vbtn btntype="primary">主要按钮</Vbtn>
            <Vbtn btntype="success">成功按钮</Vbtn>
            </div>
            `
    };
    var Slider = {
        data() {
            return {}
        },
        template: `
            <div>我是侧边栏</div>
            `
    }
    var App = new Vue({
        el: '#app',
        data() {
            return {}
        },
        components: {
            Header,
            Vcontent,
            Slider
        },
        template:
            `
            <div>
            <Header></Header>
            <Vcontent></Vcontent>
            <Slider></Slider>
            </div>
            `
    })
</script>
</body>
</html>

插槽的多个标签应用

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>vue</title>
</head>
<body>
<div id="app"></div>
<script src="./vue.js"></script>
<script>
    // 创建全局组件
    // Vue.componnet('name',{option})
    Vue.component('myLi', {
        template: `
           <li>
                预留的第一个坑
                <slot name="two"></slot>
                预留的第二个坑
                <slot name="three"></slot>
            </li>
           `
    });
    var App = {
        template: `
            <div>
                <ul>
                <myLi >
                    <h2 slot="two">我是第一个坑</h2>
                    <h2  slot="three">我是第二个坑</h2>
                </myLi>
</ul>
            </div>
`
    };
    new Vue({
        el: '#app',
        components: {
            App
        },
        template: `<App/>`
    })
</script>
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/anyux/p/12202967.html
今日推荐