Anonymous
Armen
Anonymous
:D
Armen
Хех, ну ладн
Ruslan
какой объект клонировать? я делал 2 клона через Object.assign, но оно странно себя ведет - v-model работает на два объекта одновременно
Armen
Armen
Object.assign копирует только первый уровень
Anonymous
Дипклон из рамды юзайте
Anonymous
Из лодеша он не норм
Igor
Клонируй через JSON.parse(JSON.stringify(obj))
Anonymous
Anonymous
Кстати, вы тут за структуру компонентов говорили... логично ли структурировать както так? Альсо, всякую дамми дату я выношу в json. Это нормально?
Igor
А так да
Armen
Denys
В лодаше есть deepClone для объектов
Armen
О, ребята, знает кто какую-то легковесную либу для ajax запросов?
Anonymous
Из лодеша он не норм
Armen
Мне надо файлы через post слать
Armen
Больше ничего
Anonymous
Igor
Denys
Anonymous
Полифил ыетча и норм
Anonymous
Armen
Мне не надо столько функционала, сколько в аксиос
Armen
Прост не хчу на ваниле писать)
Armen
Ща фетч гляну
Denys
Fetch это ванила
Anonymous
Igor
Но прокачанная
Anonymous
Видел вариант, в котором все файлы относящиеся к компоненту именовались как и компонент.
Я пока хз есть ли какие-то общепринятые стандарты в этом плане.
Anonymous
А что именно? Структура? Json?
Или именование?
Структура, именования. Для компонентов, которые что-то делают, можно создать папку components и хранить их там. Компоненты-страницы - в папке views, стили - в папке со стилями и т.д. У компонентов не правильное именование. Это всё нужно для более удобной читаемости. Почитай стайл гайд.
Ruslan
спасибо, что надоумили ипользовать lodash. Я то думал Object.assign справиться
Anonymous
Anonymous
Рамда
Anonymous
Юзай рамду
Ruslan
так лодаш в проекте и работает))
Igor
Ruslan
не, знаю, может есть какие-то подводные камни
Anonymous
Anonymous
Anonymous
Ruslan
нужно будет разобраться в разнице рамды и лодаша, в любом случае спасибо
xxtux
Это как лопата и перфоратор
Bohdan
а что есть что?)
Anonymous
Anonymous
Я слышал в лоде залупа с дипклоном, что то недавно на слуху было
Melstone
Ребят помогите:
есть data с вложенными объектами, например:
data () {
return {
title: 'Cookie Баннер',
fields: [
{
when: this.$store.state.app.websiteSettings.isCookieBannerEnabled,
type: 'description',
text: "<p>Введите текст подтверждения, который вы хотите показывать своим посетителям.</p>"
},
...
]
}
}
Изменяем в vuex store значение this.$store.state.app.websiteSettings.isCookieBannerEnabled, а оно не обновляет значение во вложенном json-объекте. Почему так происходит и как поступать в таких ситуациях?
Armen
Armen
Чтобы менялось надо computed делать
Melstone
понятно, минуту, сейчас демку сформирую
Melstone
Вот кусок кода:
data () {
return {
title: 'Cookie Баннер',
fields: [
{
type: 'check',
name: 'isCookieBannerEnabled',
title: 'Включить Cookie Баннер',
value: this.$store.state.app.websiteSettings.isCookieBannerEnabled
},
{
when: this.$store.state.app.websiteSettings.isCookieBannerEnabled,
type: 'description',
text: "<p>Введите текст подтверждения, который вы хотите показывать своим посетителям.</p>"
},
{
when: this.$store.state.app.websiteSettings.isCookieBannerEnabled,
name: 'cookieBannerText',
type: 'wysiwyg',
placeolhder: 'Введите сообщение…',
value: this.$store.state.app.websiteSettings.cookieBannerText
},
...
]
}
}
нужно чтобы по изменению свойства value первого элемента массива изменялись свойства when у остальных элементов массива. Как в computed это примерно будет выглядеть?
Melstone
Как-то так?
computed: {
isCookieBannerEnabled: function() {
for (var i = 0; i < this.fields.length; i++) {
if (this.fields[i].name == 'isCookieBannerEnabled') {
return this.fields[i].value;
}
}
}
}
Hedint
не совсем. у тебя тут this ссылается на локальную data
Melstone
И необходимо чтобы в data изначально свойство when было. А значения в computed насколько знаю после data присваиваются.
Melstone
Как правильнее тогда реализовать этот момент?
Hedint
https://vuex.vuejs.org/ru/state.html
https://vuex.vuejs.org/ru/getters.html
на самом деле всё это есть в доке vuex, почти самое начало. читай про геттеры и про mapState
в твоем случае можно:
1. засунуть в computed полностью весь fields и работать с ним, как с локальным.
...mapState({fields: (state) => state.app.штота.fields})
это так себе вариант, но работать будет.
2. написать геттер в сторе isCookieBannerEnabled, в котором будет что-то вроде кода, который ты написал выше, а потом прокинуть его в локальный computed (это кажется более хорошим вариантом)
Melstone
Спасибо за развернутый ответ. Второй наверное получше.
Melstone
В Computed же нельзя данные изменять?
Hedint
нет
Hedint
если надо что-то в сторе поменять, меняют через мутации
Melstone
>а потом прокинуть его в локальный computed
каким образом прокидывать? в двух словах
Hedint
import { mapGetters } from 'vuex'
export default {
// ...
computed: {
// примешиваем геттеры в вычисляемые свойства оператором расширения
...mapGetters([
'isCookieBannerEnabled',
])
}
}
Serge
В Computed можно присваивать, если сеттер написать
Melstone
понятно, сейчас попробую через vuex getters сделать
Serge
И можно еще watch ером было обойтись
Melstone
В общем геттер написал, он обновляется, но data не обновляется:
data () {
return {
title: 'Cookie Баннер',
fields: [
{
type: 'check',
name: 'isCookieBannerEnabled',
title: 'Включить Cookie Баннер',
value: this.$store.state.app.websiteSettings.isCookieBannerEnabled
},
...
{
when: this.$store.getters.isCookieBannerEnabled,
type: 'description',
text: "<p>Требования к файлам cookie различаются. Наш текст по умолчанию является образцом; вы не должны предполагать, что он полностью удовлетворяет вашим конкретным требованиям законодательства. Photosquare не может предоставить вам юридическую консультацию, в том числе по содержанию вашего текста подтверждения, конфиденциальности или политике файлов cookie.</p>"
},
]
}
},
Serge
Бррр. Присваивание data происходит только при инициализации.
Какая разница что справа в выражении ? Геттер или переменная....
Melstone
Armen
Armen
Я так считаю
Melstone
только через this.data.fields[index].when = true/false ?
Dmitriy