• Почему не обновляется элемент на странице?

    Aetae
    @Aetae Куратор тега Vue.js
    Изначально pagesStore у тебя не реактивный, его изменения никак не регистрируются vue.

    Дальше развилка:
    vue 2: this.pages = this.$pages.getAllPages() - присвоение неявно превращает массив pagesStore в реактивный, дальнейшие изменения в нём уже будут отслеживаться.
    vue 3: оригинальный pagesStore всё ещё остаётся не реактивным, любые изменения в нём никак не отражаются на vue.

    Исходя из этого:
    vue 2: требуется знать как именно ты изменяешь этот массив, потому что потенциально оно всё ещё может работать.
    Однако не помешает сделать хранилище реактивным по умолчанию:
    const pagesStore = Vue.observable(JSON.parse(pagesJson));

    vue 3: работать оно не может в принципе, тебе следует сделать твоё хранилище реактивным:
    const pagesStore = reactive(JSON.parse(pagesJson));


    В целом не следует брать объекты неведомо откуда и ждать что vue бет автоматически реагировать на их изменения, если ты не завернул их в reactive\ref\положил в data. В отличие от других фреймворков, где проверки изменений производятся руками, vue следит за изменением только реактивных объектов. Минус - не произойдёт никаких перереисовок если объект не реактивный, плюс - перерисовка произойдёт тогда и только тогда, когда реактивное поле изменилось, а не 100500 лишних раз.
    Написано
  • Нужно поддержка на JavaScript?

    Aetae
    @Aetae Куратор тега JavaScript
    Для декодирования используется decodeURIComponent.
    Только вот где ты видишь это? Если в адресе(ссылке) - то это нормально, это стандарт передачи и сервер сам разберётся и раскодирует.
    Написано
  • Как передать данные из сервера axios на express?

    Aetae
    @Aetae
    Klayeryt, *
    axios.post('http://localhost:5000/tutorials', this.login)
    Написано
  • Как сделать на vueJs 3 похожий эффект как jQuery slideToggle?

    Aetae
    @Aetae Куратор тега Vue.js
    Алексей, какие проблемы преобразовать в options, элементарно же?:
    Если проблема в том что ты совсем не знаешь composition, то совет дня: изучи composition, тебе от него никуда не деться, даже если на этом проекте ты его не используешь.

    А твой вариант не работает как минимум из-за v-show, vue transition опережается на физическое появление компонента - v-if. а не скрытие через v-show.
    Написано
  • Вставка компонентов в тело статьи на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    photosho, не понял вопроса. Используй v-remote только для той строки что прилетает с сервера. Всё остальное делай как обычно.

    //Добавил тут возможность изменять html на лету, в предыдущей версии оно отрисовывало только первое переданное html(потому что чисто для примера)
    Написано
  • Почему не обновляется элемент на странице?

    Aetae
    @Aetae Куратор тега Vue.js
    Предыдущий совет верен, но так же хотелось бы видеть getAllPages() в также что происходит при
    bus.$emit('page-updated', {
        index,
        page,
      });
    Написано
  • Вставка компонентов в тело статьи на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    photosho, под простым вариантом я имел ввиду условно такой:


    Что позволит использовать в статьях всю мощь html и vue. Только доверие к статьям должно быть соответствующее.:)
    Иначе надо будет подключать некий html-парсер на стороне сервера, который вычистит весь мусор(неразрешённые теги и операции) из текста. Ну или можно сделать на фронте при приёме, но это уже костыльно.
    Написано
  • Вставка компонентов в тело статьи на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    photosho, что значит не теряются?
    Условно если разбить пр тегу:
    <article>
      <section>
        #GALLERY#
      </section>
    </article>

    То выйдет в первом v-html
    <article>
      <section>
    во втором
    </section>
    </article>
    .
    В первом браузер сам закроет теги, во втором проигнорирует.
    В итоге получится что-то типа:
    <article>
      <section>  
      </section>
    </article>
    <v-gallery/>


    Браузер работает с DOM, v-html - это абстракция над innerHTML, а innerHTML - абстракция над DOM, За одну операцию вставки "текста" он полностью анализирует вставляемое и приводит все теги к окончательному виду, потому что в DOM не может быть незакрытых тегов.
    Написано
  • Вставка компонентов в тело статьи на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    photosho, решение я описал выше. А с разбиением у тебя же не получится вложенность тегов делать или верстка поедет.
    Написано
  • Вставка компонентов в тело статьи на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    А сама статья в каком виде хранится? HTML, MD, ещё что-то?
    Самый простой способ в любом случае - перегнать в html с vue-компонентами где надо и скомпилировать получившийся код через compile в render функцию.
    Написано
  • Как сделать импорт type?

    Aetae
    @Aetae Куратор тега TypeScript
    Kolya112151, ну для начала - полные пути запихни, если заработает значит относительные неверно указаны.
    Написано
  • Как заставить axios игнорировать ошибки сертификата?

    Aetae
    @Aetae
    По хорошему, если ты этому сертификату доверяешь, то просто установи его для ноды. Игнорируя ошибки сертификатов ты, какбэ, делаешь дыру в безопасности.
    Написано
  • Как js понимает, какую именно ссылку удалить в EventEmmiter?

    Aetae
    @Aetae Куратор тега JavaScript
    Алексей, ещё раз: каждый раз когда ты вызываешь test() - создаётся НОВАЯ УНИКАЛЬНАЯ функция с именем secondFunc(которое не имеет значения).
    Сколько вызовов - столько функций. Все разные.
    Написано
  • Для чего setTimeout возвращает разные типы?

    Aetae
    @Aetae Куратор тега TypeScript
    tostershmoster, вся сигнатура, не только возвращаемого значения.
    Из-за подключённых node.js типаов у setTimeout без window есть какбы две сигнатуры одновременно: обычная и из ноды. При этом каждая из них имеет несколько перегрузок(overload).

    И тут ты прошёлся прямо по полю граблей:
    1. ReturnType плохо работает с overload(без дженериков - тупо берёт значение из первой сигнатуры, а не раскрывает все варианты в union).
    2. Первая node.js сигнатура (
    function setTimeout<[]>(callback: () => void, ms?: number | undefined): NodeJS.Timeout
    ) требует, чтобы первый аргумент setTimeout был () => void, подо что подходит первый твой вариант(() => any) но не подходит второй((...p: any[]) => any).
    3. Во втором варианте, соответственно, берётся следующий подходящий по аргументу overload сигнатуры и вот он то, внезапно, оказывается не из node.js, а из классики.
    function setTimeout(handler: TimerHandler, timeout?: number | undefined, ...arguments: any[]): number
    , с соответствующим возвратом.

    Такое поведение overload'ов наблюдается только в ts 5, в ts 4 такой проблемы нет - сначала по порядку идут overload'ы из node.js и только потом из классики. Видно изменилась логика применения порядка overload'ов при смешении двух деклараций, либо сами декларации как-то поменялись.
    В любом случае, имхо, такое поведение - это баг(как минимум - нежелательное поведение) 5ой версии ts и следует создать им на github issue:).
    Написано
  • Как правильно разрушить и инициализировать Swiper?

    Aetae
    @Aetae Куратор тега Vue.js
    Big Wheel,
    Хм. То есть, хорошей практикой будет сделать два компонента с одинаковым контентом, но разным поведением и скрывать один и показывать другой?

    Да. Точнее сделать свой компонент, который в слоты принимает этот "одинаковый контент" и раскладывает уже как надо в двух вариантах в зависимости от какого-то свойства.)

    Однако если таки очень хочется, то судя по документации можно попробовать swiper.destroy(false, true), что не удалит инстанс при разрушении, и потому, в теории, ничего не сломает, однако это уже всё на ваш страх и риск.
    Написано
  • Как правильно разрушить и инициализировать Swiper?

    Aetae
    @Aetae Куратор тега Vue.js
    Big Wheel, так а что должно остаться вместо слайдера? Какие-то куски dom которые вы привыкли, что остаются при работе напрямую? Вы не должны работать с vue на таком низком уровне.
    v-if swiper v-else template > нужная структура по умолчанию руками
    Вы не знаете и не должны знать, что происходит внутри компонента при его использовании: ни какие там классы, ни какая там dom-структура.
    Компонент - это атомарная единица, чёрный ящик, который гарантирует только то, что предоставляет в своём api, под капотом же меняться может что угодно от версии к версии.

    Если нужное вам поведение может быть стандартизировано, то у компонента должен быть prop условно "inactive" который гарантирует внешний вид и поведение в отключённом состоянии.
    Написано
  • Как сделать импорт type?

    Aetae
    @Aetae Куратор тега TypeScript
    Kolya112151, если ошибка появляется в браузере значит в браузер прилетает код, который содержит import type. После ts компиляции никакой информации о типах не остаётся, значит шаг с ts компиляцией где-то пропущен.

    Больше ничего сказать нельзя, не зная какой системой сборки вы пользуетесь и какой у вас там конфиг.
    Написано
  • Как сделать импорт type?

    Aetae
    @Aetae Куратор тега TypeScript
    Василий Банников, это удобно, чтоб не плодить случайных циклических ссылок меж файлами.
    Очень мерзкая хрень эти циклические зависимости, потому что они по началу спокойно работают и множатся, а потом внезапно перестают и сиди - разматывай.)
    Написано
  • Как сделать импорт type?

    Aetae
    @Aetae Куратор тега TypeScript
    Kolya112151, WbICHA, babel из коробки умеет TS но во-первых без малейшей, собственно, проверки типов(тупо гонит как может, без ошибок), во-вторых ограничено(последний раз когда смотрел - даже enum'ы не умел).

    Нормальный и самый надежный подход: использовать сначала компиляцию ts в режиме esnext, а потом уже результат компиляции прогонять через babel с нужным browserlist. Так достигается минимальный необходимый размер бандла со всеми плюшками, за счёт небольшого оверхеда времени сборки.
    Написано
  • Как правильно задать типизацию?

    Aetae
    @Aetae Куратор тега TypeScript
    state у тебя где-то должно быть полностью типизировно.
    Написано