首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue.js会阻止classList.remove工作吗?

Vue.js会阻止classList.remove工作吗?
EN

Stack Overflow用户
提问于 2019-01-19 02:24:43
回答 2查看 2.4K关注 0票数 1

我使用的是Vue.js,并且我希望在调用Vue构造函数之前隐藏元素,否则会向用户显示一堆花括号。我有以下几点:

HTML:

代码语言:javascript
复制
<div class="main hide-me" id="my-vue-element">
    <!-- stuff -->
</div>

CSS:

代码语言:javascript
复制
.hide-me {
    display: none !important;
}

JavaScript:

代码语言:javascript
复制
var myVueElement = document.getElementById("my-vue-element");

if (myVueElement) {
    var myApp = new Vue({
        el: myVueElement
      , data: {
            /* stuff */
        }
      , methods: {
            /* stuff */
        }
    });

    console.log(myVueElement);
    console.log(myVueElement.classList);
    myVueElement.classList.remove("hide-me");
    console.log(myVueElement.classList);
    console.log(myVueElement.getAttribute("class"));

控制台输出为:

代码语言:javascript
复制
DOMTokenList [ "main", "hide-me" ]
DOMTokenList [ "main" ]
main

但是,该元素没有出现,并且在Firefox和Chrome中使用DOM检查器显示hide-me类仍然存在。我试着用一个简化的例子来重现这一点,但我无法做到。我在这个项目中确实有jQuery,并且我发现使用$("#my-vue-element").removeClass("hide-me"); (甚至在上面的代码之后添加它)会导致类从DOM中删除。有什么想法吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-01-19 02:37:05

在Vue中应该避免直接的DOM操作。相反,你应该让Vue来做这件事(它在这方面做得很好)。所以请使用

代码语言:javascript
复制
<your-element
  :class="['always-present', {'optional':expression}]"
/>

其中将根据数据绑定expression添加/删除optional

此外,如果您想要的只是显示/隐藏元素,则可以使用v-ifv-showv-hide (即:v-if="expression")。

有关直接DOM操作在Vue中有意义的案例列表以及每个案例的缺点或潜在陷阱,请阅读Handling Edge Cases

票数 2
EN

Stack Overflow用户

发布于 2019-01-19 03:00:13

如果你使用Vue视图/组件和它们的内部模板代码,那么在Vue准备好之前,元素是不会被渲染的。

这意味着在路由器加载视图之前,app.vue内部不会显示任何内容

代码语言:javascript
复制
<template>
  <div id="app">
    <router-view/>
  </div>
</template>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54259577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档