继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

为什么Vue中的slot不能应用v-show指令

2018-04-07 15:04:3214928浏览

Dell

7实战 · 4手记
TA的实战

今天偶然发现,在Vue中使用插槽slot,是无法通过v-show控制slot的显示的,来看代码

Vue.component('fade', {
      props: ['show'],
      template: `
        <transition @before-enter="handleBeforeEnter" @enter="handleEnter">
          <slot v-show="show"></slot>
        </transition>
      `,
      methods: {
        handleBeforeEnter: function(el) {
          el.style.color = 'red'
        },
        handleEnter: function(el, done) {
          setTimeout(() => {
            el.style.color = 'green'
            done()
          }, 2000)
        }
      }
    })

这是随便写的一个封装动画组件,如果在slot标签上使用v-show,程序功能是无法实现的,必须要改成v-if。

原因是这样的,slot实际上是一个抽象元素,有点类似template,本质上并不是一个元素。而v-show是通过控制元素的display来进行显示隐藏的,slot本质上并不是元素,所以压根也就不会有display 这个css属性。

所以,slot的显示隐藏,还真得使用v-if。

Vue的作者在社区内回答过这个问题,所以代码以这个答案为准即可。

打开App,阅读手记
69人推荐
发表评论
随时随地看视频慕课网APP

热门评论

我来蹭热度啦。。。。。?终有那么一天,我也要成为Dell Lee一样的男人,才华横溢。

就跟<template></template>一样页面上跟本没有这个标签对,当然没办法在其上添加css display属性了,所以对 <slot> <template> 都不能使用 v-show 改用 v-if

我来蹭热度啦。。。。。?终有那么一天,我也要成为Dell Lee一样的男人,才华横溢。

查看全部评论