getElementsByClassName в контексте vue - PullRequest
0 голосов
/ 06 ноября 2018

Как работает getElementsByClassName в контексте vue.js?

У меня есть следующий фрагмент кода ниже - цель состоит в том, чтобы нажать кнопку и изменить цвет тега h1 на зеленый, используя методы vue.js:

<html>
    <head>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <h1 class="main-header">{{ message }}</h1>
        <button v-on:click="colorChange">Click me</button>
    </div>
    <script>
        var app = new Vue({
        el: '#app',
            data: {
                message: 'Hello Vue!'
            },
            methods: {
                colorChange: function() {
                    // what do I do here...?
                }
            }
        })
    </script>
    </body>
</html>

Насколько я понимаю, Vue похож на React с виртуальным DOM, и вы не изменяете его напрямую.

Очевидно, что в vanilla JS вы просто делаете document.getElementsByClassName('main-header')[0].style.backgroundColor="green";, но в Vue это кажется нелогичным.

Я слишком усложняю это и на самом деле это работает? Или у Vue есть особый способ справиться с этим? Я смотрел на https://vuejs.org/v2/guide/class-and-style.html, но он просто объясняет, как связывать классы. Я также читаю https://vuejs.org/v2/guide/events.html, но мне трудно найти то, что мне нужно для нацеливания на элемент / его модификации каким-либо образом ...

Как вы выбираете и / или изменяете элемент в контексте Vue?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы правы. В Vue непосредственное взаимодействие с DOM противоречит интуиции.

К счастью, есть директива, которая позволяет применять изменения стиля напрямую, связываясь со свойством данных. (Имейте в виду, что вы можете сделать что-то подобное и с классом).

<h1 class="main-header" v-bind:style="{ color: activeColor}">{{ message }}</h1>
<button v-on:click="colorChange">Click me</button>

В вашем компоненте создайте свойство данных и обновите его по нажатию кнопки:

data: {
    message: 'Hello Vue!',
    activeColor: 'red'
},
methods: {
    colorChange: function() {
        this.activeColor = 'green'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...