在vue js中显示和隐藏框onclick

Posted

技术标签:

【中文标题】在vue js中显示和隐藏框onclick【英文标题】:Displaying and hiding box onclick in vue js 【发布时间】:2019-06-09 04:17:18 【问题描述】:

当我点击图标cart时,我想隐藏和显示。问题在于再次隐藏那个盒子,

点击前的图标:https://imgur.com/RxmcwsX 点击后:https://imgur.com/cCt4mk0 这是 css 图片:https://imgur.com/d6ZPUbY Vue js:https://imgur.com/2kWZdly

mycss 代码:

<li class="nav-item" id="cart">
<i class="fa fa-shopping-cart fa-lg" @click="showCart"></i>
<div id="list-cart">
    <div class="shadow-lg" style="position:absolute;background-color: #FFF;width:300px;height:300px;right:210px;top:60px;border-radius: 5px;" v-bind:style=" visibility: computedVisibility "></div>
</div>

vue 代码

    var cart = new Vue(
    el: '#cart',
    data: 
        visibility: 'hidden'
    ,
    computed: 
        computedVisibility: function() 
            return this.visibility;
        
    ,
    methods: 
        showCart: function(event) 
            this.visibility = 'visible';
        
    
);

【问题讨论】:

【参考方案1】:

使用v-if 而不是直接操作样式:

<li class="nav-item" id="cart">
<i class="fa fa-shopping-cart fa-lg" @click="visible = !visible"></i>
<div id="list-cart">
    <div class="shadow-lg" v-if="visible"></div>
</div>

var cart = new Vue(
  el: '#cart',
  data: () => (
    visible: false
  )
);

【讨论】:

那是工作谢谢,但必须点击图标购物车,如何通过点击任何地方来消除它? 为此,您需要检测元素边界之外的点击。他是example。【参考方案2】:

您可以尝试将其绑定到一个类。然后你可以有一个三元表达式来确定你的类。

<li class="nav-item" id="cart">
<i class="fa fa-shopping-cart fa-lg" @click="showCart"></i>
<div id="list-cart">
    <div
     style="position:absolute;
     background-color: #FFF;
     width:300px;
     height:300px;
     right:210px;
     top:60px;
     border-radius: 5px;"
     v-bind:class="[visible ? 'show' : 'hide', 'shadow-lg']">
    </div>
</div>

然后,您可以拥有一个可见的数据元素,该元素最初设置为 false。你也应该make data a function

data: () => (
  visible: false
)

那么您的展示车功能可以是:

showCart() 
        this.visible = !this.visible
    

您也可以调用它来关闭购物车。

然后设置你的样式:

<style scoped>
  .show 
    visibility: visible
  
.hide 
    visibility: hidden
  
</style>

也就是说,有很多提供“模态”的软件包,这在很大程度上可以为您处理。我推荐 vuetify,但如果你是老式类型,你甚至可以使用 bootstrap。

【讨论】:

我喜欢您的方法,因为在某些情况下,您希望单击将某些内容绑定到有条件隐藏的元素的扩展菜单。如果你使用 v-if 代替,元素将被有条件地从 DOM 中删除和添加,并且点击绑定可能会失败。【参考方案3】:

如果您问题中的给定脚本有效,您只需更改showCart 函数,如下所示。

    var cart = new Vue(
    el: '#cart',
    data: 
        visibility: 'hidden'
    ,
    computed: 
        computedVisibility: function() 
            return this.visibility;
        
    ,
    methods: 
        showCart: function(event) 

          if(this.visibility ==='visible')
                this.visibility = 'hidden';
          else if(this.visibility==='hidden')
                this.visibility = 'visible'
          

        
    
);

【讨论】:

以上是关于在vue js中显示和隐藏框onclick的主要内容,如果未能解决你的问题,请参考以下文章

vue中改变选中当前项的显示隐藏或者状态的实现方法

如何在 v-data-table Vue.js + Vuetify 中显示和隐藏行

如何显示和隐藏在 vue js 中动态创建的 div(多格式选项卡结构)

Vue - 实现双击显示编辑框;自动聚焦点击的显示框;点击编辑框外的地方,隐藏编辑框

使用 Vue.js (cdn) 在特定元素上切换显示/隐藏

vue中导航栏的显示和隐藏