如何使用Vue.js隐藏div

jos*_*dev 7 html vue.js

我希望能够使用Vue隐藏div,而对性能的影响尽可能小,因为网站上将使用这种方式处理几个div。我该怎么做呢?

隐藏DIV>上的另一个DIV点击时显示它:实施例(无Vue公司)

使用Vue(无效)

html

<div id="app" v-on:click="seen = !seen" class="control">
    <p>click app</p>
</div>

<div v-if="seen" id="hide">
<p>hide me </p>
</div>
Run Code Online (Sandbox Code Playgroud)

的JavaScript

new Vue({
    el:'#hide',
    data:{
        seen: false
    }
})
Run Code Online (Sandbox Code Playgroud)

Pat*_*ele 11

如@Ferrybig所述,Vue仅对其绑定的元素以及所有这些子元素具有控制权。您的hide元素在绑定到Vue(app)的元素之外,因此Vue无法更改它。

稍作更改,您的代码即可正常工作:

<div id="wrapper">
  <div id="app" v-on:click="seen = !seen" class="control">
      <p>click app</p>
  </div>

  <div v-if="seen" id="hide">
    <p>hide me </p>
  </div>
</div>

new Vue({
    el:'#wrapper',
    data:{
        seen: true
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这种解决方案有点危险。因为使用“ v-if”,div元素不会在DOM中呈现。可能是v-show更好。 (2认同)

Hou*_*eng 9

我建议使用“v-show”或“:class”来有效地隐藏组件。根据我自己的经验,在一些奇怪的情况下,v-show 可能会导致 ag-grid 组件进入错误的数据表,但是在使用 ":class" 时没有问题。

模板代码可以是:

<div v-show="seen" id="hide">
   <p>hide me </p>
</div>
Run Code Online (Sandbox Code Playgroud)

或者

<div :class="{ hide: !seen }" id="hide">
   <p>hide me </p>
</div>
Run Code Online (Sandbox Code Playgroud)

使用 CSS

.hide {
    visibility: hidden !important;
}
Run Code Online (Sandbox Code Playgroud)


Lor*_*ord 7

您可以使用 v-if-else 或 v-show,它们以不同的方式工作。v-if, v-else 会将您的 HTML 元素附加/分离到其根元素。另一方面,v-show 将使用 style="display:none;",

示例:v-if、v-else

<body>
    <div id = 'app'>
        <button @click="show = !show">Click</button>
        <p v-if="show"> 
            v-if value of show is: {{show}}
        </p>
        <p v-else> 
            v-else value of show is: {{show}}
        </p>
    </div>
    <script>
        const app = new Vue({
            el:'#app',
            data: function(){
                return{
                    show: true
                }
            }
        });
    </script>
</body>
Run Code Online (Sandbox Code Playgroud)

示例 v-show

<body>
    <div id = 'app'>
        <button @click="show = !show">Click</button>
        <p v-show="show"> 
            v-show works with style="display:none;"
        </p>

    </div>
    <script>
        const app = new Vue({
            el:'#app',
            data: function(){
                return{
                    show: true
                }
            }
        });
    </script>
</body>
Run Code Online (Sandbox Code Playgroud)