美文网首页
vue具名插槽使用

vue具名插槽使用

作者: 小棋子js | 来源:发表于2019-12-24 11:36 被阅读0次

插槽用法:子组件header固定;父组件outside插槽
header/index.vue

<template>
    <div :class="['header-wrap',fixed?'fixed':'',shadow?'shadow':'']" :style="{'background-color':bgColor,color}">
        <div class="header">
            <div class="left" v-if="$slots.left">
                <slot name="left"></slot>
            </div>
            <div class="left" v-else>
                <div @click="to" v-if="arrow">
                    <i class="iconfont icon-fh"></i>
                    <span v-if="backText">{{backText}}</span>
                </div>
            </div>
            <div class="content">
                <div class="middle" v-if="$slots.title">
                    <slot name="title"></slot>
                </div>
                <div class="middle" v-else>{{title}}</div>
            </div>
            <div class="right">
                <slot name="right"></slot>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        props: {
            title: String,
            arrow: {
                type: Boolean,
                default: false
            },
            backText: String,
            shadow: {
                type: Boolean,
                default: true
            },
            fixed: {
                type: Boolean,
                default: true
            },
            bgColor: {
                type: String,
                default: '#262D47'
            },
            color: {
                type: String,
                default: '#D9AC71'
            },
            link: String
        },
        methods: {
            to() {
                if (this.link) {
                    this.$router.push(this.link)
                } else {
                    this.$router.back()
                }

            }
        }
    }
</script>

<style lang='less' scoped>
    .header-wrap {
        width: 100%;
        height: 48px;
        padding: 0 10px;
        &.fixed {
            position: fixed;
            left: 0;
            top: 0;
            z-index: 999;
        }
        &.shadow {
            box-shadow: 4px 0 8px rgba(0, 0, 0, .1);
        }
        .header {
            height: 100%;
            display: flex;
            justify-content: space-between;
            align-items: center;
            .left {
                display: flex;
                align-items: center;
                width: 60px;
                font-size: 14px;
                div {
                    height: 100%;
                    display: flex;
                    align-items: center;
                    i {
                        font-size: 14px;
                    }
                    span {
                        margin-left: 4px;
                    }
                }
            }
            .content {
                width: 0;
                flex: 1;
                display: flex;
                justify-content: center;
                .middle {
                    font-size: 16px;
                    overflow: hidden;
                    text-overflow: ellipsis;
                    white-space: nowrap;
                }
            }
            .right {
                display: flex;
                justify-content: flex-end;
                width: 60px;
                font-size: 13px;
                a {
                    color: @link-color;
                }
            }
        }
    }
</style>

outside/index.vue

<div id="outside">
            <Header>
                <div slot="left" @click="onFinish">
                    <i class="iconfont icon-fh"></i>
                </div> 
                <div slot="title" class="title-wrap">
                    <mu-menu :open.sync="menuVisible" v-show="tradeTab.active==0||tradeTab.active==1">
                        <div class="dropdown-btn">
                            {{coin}}/xxx
                            <mu-icon value="arrow_drop_down" size="28"></mu-icon>
                        </div>
                        <mu-list slot="content">
                            <mu-list-item v-for="coin in coins" :key="coin" @click.native="switchCoin(coin)">
                                <mu-list-item-title>{{coin}}</mu-list-item-title>
                            </mu-list-item>
                        </mu-list>
                    </mu-menu>
                </div>
                <div slot="right" class="title-rank">
                    <div v-if="!userInfo.trade_level" class="ranktext" @click="clickrank">xxx</div>
                    <img v-else class="rankimg" @click="clickrank" :src="items[userInfo.trade_level-1].img" alt="">
                    <div class="line"></div>
                    <div class="fabu" @click="onjump">发布</div>
                </div>
            </Header>
        </div>
<script>
    import Header from '@/components/header/index.vue'
export default {
  components: {
            Header
        },
}
</script>

相关文章

  • Vue之深入理解插槽—slot, slot-scope, v-s

    Vue 2.6.0 以前Vue 2.6.0 以后具名插槽 slot具名插槽 v-slot作用域插槽 slot-sc...

  • vue jsx使用插槽

    默认插槽:jsx: 具名插槽: App.vue

  • 详解vue中的插槽

    1.在vue中插槽分为具名插槽和非具名插槽;而插槽的使用主要是我们在页面中存在很多个相似但却重复的部分; 首先我以...

  • vue 插槽 slot

    插槽使用 普通插槽 具名插槽 使用具名插槽 从插槽里面传值出来如何接收? 如: 如何判断某个插槽是否被使用 组件内...

  • vue具名插槽使用

    插槽用法:子组件header固定;父组件outside插槽header/index.vue outside/ind...

  • vue-slot

    从官网上我们可以获知,Vue中的slot主要分为:单个插槽、具名插槽和作用域插槽三种。而其使用也较为简单,比如我们...

  • Vue-使用插槽

    二。具名卡槽 作用域插槽:插槽循环时使用

  • Vue 未解决问题的结果

    1. 在利用cli3创建项目时,具名插槽的使用无法显示,也没有报错 在vue.2.6.3 版本以后插槽的使用方法略...

  • 一些已解决和未解决的问题,一些已回顾和未回顾的问题

    1. 在利用cli3创建项目时,具名插槽的使用无法显示,也没有报错 在vue.2.6.3 版本以后插槽的使用方法略...

  • Vue插槽的使用方法

    About 使用插槽是为了能够在页面中显示向组件中传入的新的HTML 一、具名插槽 效果图: 2. 具名插槽的使用...

网友评论

      本文标题:vue具名插槽使用

      本文链接:https://www.haomeiwen.com/subject/dnixoctx.html