Несколько вопросов по vue от новичка
Салют.
Прошу прощения за бестолковые вопросы, но по некоторым поиск в гугле ничего вразумительного не даёт, по другим не знаю как правильно сформировать запрос. Прошу помочь с вопросами: 1. Эти две записи идентичны? <script setup> </script>
<script>
export default {
setup() {
}
}
</script>
2. Имеем такой инпут <input v-model="test" @input="test=$event.target.value" > При клике по некоторой кнопке, надо получить value. Так работает:
<script>
export default {
data() {
return {
test: ''
}
}
}
</script>
Так нет. Как правильно объявлять? <script setup> const test = '' </script> 3. Есть такой код <div class="item" v-for="item in items" :key="item.id" > <button>Клик</button> </div> Можно ли средствами vue реализовать, чтобы при клике по кнопке, добавлялся/удалялся класс у родителя? |
vue parent class toggle
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.item {
border: 1px solid #008000;
margin: 4px;
}
.active {
border: 1px solid red;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
</head>
<body>
<div id="app">
<div v-for="item in items" :key="item.id" :class="[{ active: item.isActive },'item']">
<button @click="item.isActive = !item.isActive">Клик</button>
</div>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
items: [{
id: 1,
isActive: false
}, {
id: 2,
isActive: false
}, {
id: 3,
isActive: false
}]
}
});
</script>
</body>
</html>
|
рони,
Спасибо. А если isActive не в массив с данными помещать? Так делают, вообще?
<script>
export default {
data() {
return {
itemsData: this.$store.state.someDataArray,
itemsFlag: {}
}
},
mounted() {
for (let item of itemsData) {
itemsFlag[`item_${item.id}`] = false
}
}
}
</script>
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.item {
border: 1px solid #008000;
margin: 4px;
}
.active {
border: 1px solid red;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.7.7/vue.min.js" ></script>
</head>
<body>
<div id="app">
<div v-for="{id} in itemsData" :class="[{ active: itemsFlag[id] },'item']">
<button @click="itemsFlag[id] = !itemsFlag[id]">Клик</button>
</div>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
itemsData: [{
id: "a"
}, {
id: "b"
}, {
id: "c"
}],
itemsFlag : {
"a" : false,
"b" : false,
"c" : false
}
}
});
</script>
</body>
</html>
|
Чтоб не запариваться с предзаполнением id-шников -
@click="$set(itemsFlag, id, !itemsFlag[id])"(в vue 3 этого уже не нужно) |
Aetae,
подскажи url vue 3 для строки 17 пост #4? или как код выше будет выглядеть для версии 3? что из этого грузить https://cdnjs.com/libraries/vue/3.2.37 ? |
Цитата:
|
рони, vue.runtime.global.min.js
|
Aetae,
спасибо!!! |
Aetae,
что-то не так ... :(
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.item {
border: 1px solid #008000;
margin: 4px;
}
.active {
border: 1px solid red;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.runtime.global.min.js" ></script>
</head>
<body>
<div id="app">
<div v-for="{id} in itemsData" :class="[{ active: itemsFlag[id] },'item']">
<button @click="$set(itemsFlag, id, !itemsFlag[id])">Клик</button>
</div>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
itemsData: [{
id: "a"
}, {
id: "b"
}, {
id: "c"
}],
itemsFlag : {
}
}
});
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 22:14. |