Несколько вопросов по 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, время: 01:39. |