Vue.js новичок здесь :-)
У меня есть несколько блоков testblock, у которых есть дочерние блоки teststep. Существует кнопка переключения testblock для переключения всех элементов testblock, и каждый testblock имеет кнопку переключения для переключения своего дочернего teststeps:
<div id = "app">
<div><button class = "btn btn-lg btn-primary" @click = "showTestblock = !showTestblock">Toggle testblocks</button></div>
<div v-if = "showTestblock">Testblock-1</div>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button></div>
<div v-if = "showTeststep">Teststep-1a</div>
<div v-if = "showTeststep">Teststep-1b</div>
<div v-if = "showTestblock">Testblock2</div>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button></div>
<div v-if = "showTeststep">Teststep-2a</div>
<div v-if = "showTeststep">Teststep-2b</div>
<div v-if = "showTestblock">Testblock3</div>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button></div>
<div v-if = "showTeststep">Teststep-3a</div>
<div v-if = "showTeststep">Teststep-3b</div>
</div>
И код Vue:
new Vue({
el: '#app',
data: {
showTestblock: false,
showTeststep: false
}
})
Есть 2 проблемы:
teststep переключает все этапы тестирования, а не только
специфический testblock. В JQuery я бы добавил идентификатор, но у Vue есть
лучший способ сделать это?teststeps и кнопка переключения testblock находится в
нажал, тестовые блоки больше не отображаются, но teststeps
находятся. Как тоже закрыть детей?Обновлять:
Обновленный код с правильным вложением:
<div id = "app">
<div><button class = "btn btn-lg btn-primary" @click = "showTestblock = !showTestblock">Toggle testblocks</button>
<div v-if = "showTestblock"><span>Testblock-1</span>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button>
<div v-if = "showTeststep">Teststep-1a</div>
<div v-if = "showTeststep">Teststep-1b</div>
</div>
</div>
<div v-if = "showTestblock"><span>Testblock-2</span>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button>
<div v-if = "showTeststep">Teststep-2a</div>
<div v-if = "showTeststep">Teststep-2b</div>
</div>
</div>
<div v-if = "showTestblock"><span>Testblock-3</span>
<div v-if = "showTestblock"><button class = "btn btn-lg btn-primary" @click = "showTeststep = !showTeststep">Toggle teststeps</button>
<div v-if = "showTeststep">Teststep-3a</div>
<div v-if = "showTeststep">Teststep-3b</div>
</div>
</div>
</div>
</div>
да, есть способ получше. То, что вы делаете, ничем не отличается от того, что вы используете одно и то же имя для всех относительных вещей и ожидаете, что что-то вроде document.getElementsByName сможет точно различать то, что вы хотите. Почему вы не используете 1. массив 2. объект?
@Alendorff, ты прав, вложение было ужасным, поэтому я обновил это. Теперь вопрос 2 решен. Что значит: probably it's just better to use different flags for different blocks? Можете привести краткий пример?





«Переключить тестовый шаг переключает все тестовые шаги, а не только тестовые блоки». - тут никаких сюрпризов. Ваши тестовые шаги не складываются в родительские тестовые блоки. Попробуйте изменить структуру html и, возможно, вы решите вторую проблему. Насчет первого - наверное, просто лучше использовать разные флаги для разных блоков. Думаю, это естественно. Если вы используете jQ-подобный подход - вероятно, вы также можете добавить идентификатор к элементу, написать функцию для обработчика кликов и вручную сделать что-то с узлом dom (но этот способ противоречит таким фреймворкам, как vue, и лучше избегать прямых мутаций dom).