javascript 类不会应用于VueJS中的元素

rqcrx0a6  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(111)

所以我想在testvalue为真的时候,把.testcolor类应用到div,在为假的时候,什么都不应用。
当我将getClass方法添加到:class时,它甚至不会被调用,但当从{{ getClass }}调用时,它会被调用。我尝试清除该高速缓存,甚至重写了整个代码,但它仍然不起作用!以下是完整的代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Vue Test</title>
        <style>
            .testcolor {
                color: red !important;
            }
        </style>
    </head>
    <body>
        <div id="test" :class="getClass">
            <h1>Test stuff</h1>
            <h2>{{ testvalue }}</h2>
        </div>
        <script type="module">
            import { createApp } from "https://unpkg.com/vue@3.2.19/dist/vue.esm-browser.js";

            createApp({
                data() {
                    return {
                        testvalue: true,
                    };
                },
                methods: {
                    getClass() {
                        console.log("Method 'getClass' called");
                        return this.testvalue ? "testcolor" : "";
                    },
                },
            }).mount("#test");
        </script>
    </body>
</html>

我发现如果我把Vue示例挂载到div元素上,并把:class=“testClass”(来自答案)添加到h2上,它就能工作了!但是当我把它挂载到h2元素上时,它就不能工作了!

kgsdhlau

kgsdhlau1#

根据您的评论编辑@martin0300

首先,你需要将division Package 在另一个division中,它的id必须是test。Vue不认为容器元素(id为test的div)是应用程序的一部分,也不处理任何指令。在下面留下了一个提到这一点的引用。
https://vuejs.org/guide/essentials/application.html#mounting-the-app
因此,请将您的标记更改为这样的内容,以应用getClass方法中的值...

<div id="test">
    <div :class="getClass()">
        <h1>Test stuff</h1>
        <h2>{{ testvalue }}</h2>
    </div>
</div>

...或使用计算属性方法的这种方式(下面解释)。

<div id="test">
    <div :class="testClass">
        <h1>Test stuff</h1>
        <h2>{{ testvalue }}</h2>
    </div>
</div>

--
原始消息:
getClass当被定义为一个方法时需要被调用,并且返回值("testcolor")被设置为:class的值。注意函数调用getClass()代替了你使用的getClass

<div id="test" :class="getClass()">
    <h1>Test stuff</h1>
    <h2>{{ testvalue }}</h2>
</div>

也就是说,这不是有条件地应用类的首选方式。我们更喜欢计算属性而不是方法。方法在每次渲染时都会被调用,而计算属性只有在它所依赖的底层React数据发生变化时才会重新计算(在这种情况下,计算属性testClass依赖于React属性testvalue)。
在你的例子中,惯用的Vue代码如下。注意,计算属性不像函数那样被调用,因为它们是使用访问器方法/使用JS代理(:class="testClass"NOT:class="testClass()")在内部实现的。我相信方法和计算属性使用方式之间的差异是造成你混淆的原因。

<div id="test" :class="testClass">
    <h1>Test stuff</h1>
    <h2>{{ testvalue }}</h2>
</div>
<script type="module">
    import { createApp } from "https://unpkg.com/vue@3.2.19/dist/vue.esm-browser.js";

    createApp({
        data() {
            return {
                testvalue: true,
            };
        },
        computed: {
            testClass() {
                console.log("Recomputed testClass");
                return this.testvalue ? "testcolor" : "";
            },
        },
    }).mount("#test");
</script>

相关问题