Ответы пользователя по тегу Vue.js
  • Как запретить уничтожать компонент при переходе между роутами?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Чтоб сохранять компоненты в памяти у Vue есть <keep-alive>.
    Но, думаю, это не то что вам надо, а надо вам независимое от компонентов хранилище.
    Вы можете использовать для этого Vuex или обойтись простым реактивным объектом: в Vue 2 такой можно получить через Vue.observable, в Vue 3 просто через Vue.ractive.
    Ответ написан
  • Как правильно подключить vue компонент к странице?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Скрипт которой лежит в assets и инланится просто в html - не компилируется webpack'ом и подключается как есть. Очевидно, что нифига не будет работать.
    Тебе нужно добавить дополнительный entry для вебпака, чтоб он скомпилировал результат. Или сделать отдельный webpack проект для этого скрипта.
    Ответ написан
    Комментировать
  • Как перенести большой html шаблон на vue.js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    И? Твой алгоритм абсолютно действенен.)

    Vue-шаблоны полностью html-соместимы(в отличе от).
    Кинул html в .vue.
    Кинул css по папочкам - сделал import '/some.css';
    Кинул картинки по папочкам - vue умный, сам их через webpack их подтянет.
    И всё работает.)
    А вот итеративность из js тебе придётся переписать vue-way. Если там какой jquery был или типа того - оно совсем не совместимо с парадигмой vue. Накостылять конечно можно, и довольно просто, но как - я тебе советовать не буду.)
    Ответ написан
  • Как лучше организовать мобильные и десктопные версии компонентов в vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ну если оптимизировать - то desctop в mobile на ходу превратиться не может(может конечно, но такие "экспериментаторы" не обломятся перегрузить страницу). В таком случае: вынести экспорты таких "двойных" компонентов в отдельный файл который сразу при загрузке экспортируют нужный вариант, без всякой лишней динамики.

    Если же делать динамично, то написать функцию хэлепер, которая принимает на вход обе версии компонента и возвращает вспомогательный функциональный pass through компонент, который выбирает нужный из двух, а всё остальное просто пробрасывает.
    Ответ написан
    Комментировать
  • Как правильней сделать роут vue-router?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Все именованные параметры экранируются. Если article не несёт никакого практического смыла - то логично её просто выкинуть.

    Однако если очень нужно, можно делать так: path: "/news/*", - звёздочка исключение и не экранируется.
    Ответ написан
    Комментировать
  • Как правильно хранить и показывать отмеченные сущности во vueJS 2?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Также как раньше жили, без этих ваших новомодных Set\Map:
    chosenLangs: {},
    
    clickLang(id) {
      return this.isIssetLang(id) 
        ? this.$delete(this.chosenLangs, id) 
        : this.$set(this.chosenLangs, id, true);
    },
    
    isIssetLang(id) {
      return id in this.chosenLangs;
    },
    Ответ написан
    1 комментарий
  • При включенном чекбоксе должен быть выбран хотя бы один чекбокс из группы?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Вникать лень, но решение стандартно: вместо v-model использовать комбинацию @input и :value/:checked, где на событие изменения ставить нужное условие.
    Либо как значение использовать computed с set и get, где в set проверять условие.
    Либо, на край, юзать watch и, опятьже, по условию возвращать как было.
    Ответ написан
    Комментировать
  • Глобальная шина событий Vue.js это норм?

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

    Однако вариант с bus = new Vue() хоть и прост, но чреват утечками памяти. Лучше делать шину через глобальный миксин, который по destroy автоматически очистит всех слушателей конкретного компонента.
    Ответ написан
    Комментировать
  • Как добавить фильтрацию по select к существующему поиску?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ну и какие проблемы по образу и подобию сделать?
    Все ответы у тебя уже есть в коде.
    <select v-model="species">
    data: {
      species: '',
    searchCharacter() {
      return this.characters.filter((character) => {
        return character.name.toLowerCase().includes(this.search.toLowerCase())
        && character.species.toLowerCase().includes(this.species.toLowerCase());
      });
    },

    Впредь используй логику. Даже не зная javascript и vue, имея только голову на плечах можно было бы дойти до этого ответа.
    Ответ написан
    1 комментарий
  • Как добавить ES 2020 во Vue 2?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Набросок чуть менее хакерского способа, чем предложенный выше:
    vue.config.js

    const { transformSync } = require("@babel/core");
    
    const fs = require('fs');
    
    const babelTransform = {
      transformCode: (_, code) => transformSync(`(function(){${code}}())`, {
        filename: "",
        ast: false,
        retainLines: true,
        babelrc: true,
        compact: true,
        minified: true
      }).code.replace(/;$/,'')
    };
    
    const addBabelTransform = (options) => {
      const { compilerOptions } = options;
      const modules = compilerOptions && compilerOptions.modules ? compilerOptions.modules.concat(babelTransform) : [babelTransform];
      return {
        ...options,
        compilerOptions: {
          ...compilerOptions,
          modules
        }
      }
    }
    
    
    module.exports = {
      chainWebpack: config => {
        config.module
          .rule('vue')
          .use('vue-loader')
          .tap(addBabelTransform);
      },
    }

    До ума я его не довёл, т.к. всё равно слишком "грязно", а надобности то особо и нет: если вам надо в компоненте погружаться глубоко в объект в поисках того, чего там может не быть - это явный признак того что текущий компонент слишком разжирел и его срочно надо резать на меньшие кусочки.
    Ответ написан
    Комментировать
  • Ошибка при регистрации компонента Failed to resolve component: Как исправить?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    components: { Vmanufacturers } - это сокращённая запись для:
    components: { "Vmanufacturers": Vmanufacturers }
    Левая сторона - это то, как будет называться компонент в шаблоне. Vue также дополнительно преобразует имена из camelCase в kebab-case. Т.о., при вашем наименовании компонента, внутри шаблона надо использовать напрямую <Vmanufacturers ...>, либо версию преобразованную по правилам camel-kebab, т.е. <vmanufacturers ...> (без тире, заметьте), либо таки переименовать по правилам: components: { "vManufacturers": Vmanufacturers }, либо, наконец, сразу импортировать как надо:
    import vManufacturers from "@/components/information/v-manufacturers";
    
    // ...
    
    components: {
      vManufacturers
    }
    Ответ написан
    1 комментарий
  • Как импортировать типы из библиотеки vue?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Увы, vue-cli из коробки это не умеет. И когда последний раз смотрел в эту сторону(пару лет назад) - плагинов для этого тоже не было. 2 года - это долго, так что рекомендую погуглить.)

    Но тут ещё одна загвоздка, о которой тоже надо заранее позаботиться: тип импортированных файлов .vue по умолчанию просто Vue, без конкретизации свойств и прочего. Чтобы были нормальные ts-типы их надо отдельно генерировать. Для этого есть либа vuedts, она не идеальна, но свою работу делает.
    Если не найдёшь готовых решений - можешь чтот-то своё с этой либой намутить.)
    Ответ написан
    Комментировать
  • Как сделать проверку забайнденного атрибута?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Про отправку формы Игорь ответил.
    А правила по условию - точно также как с любыми иными переменными, :rules ничем не отличается от какого-нить :vasya. Делаете computed свойство, которое отдаёт нужное значение и кладёте его в :rules.
    Возможно ещё понадобится quasar'овское свойство reactive-rules(а может и нет).
    Ответ написан
    Комментировать
  • Можно ли восстановить папку проекта из папки dist?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Теоретически - это возможно. На практике - никто нужного софта(декомпилятора) не писал за отсутствием спроса. Ты можешь с помощью мощных beautifier'ов типа jsnice привести код к боль-мене читаемому виду, но от исходника это будет бесконечно далеко.

    Лучше смотри в сторону софта для восстановления файлов типа recuva и, возможно, восстановления local history в ide.
    Ответ написан
    Комментировать
  • Как обновить mounted hook vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Нет, не надо обновлять mounted. Суть в том, что vue весь оптимизирован, и не перемонтирует компонент если точно такой же оказывается на том же месте, просто меняет соответствующие props.

    В твоём случае вместо того чтобы делать запрос в mounted, положи его также как SaveName(hint: в js принят camelCase, PascalCase только для классов) в methods и вызывает оттуда по watch desk_id (immediate: true - чтоб при первой загрузке тож запустилось).
    Ответ написан
    1 комментарий
  • Как исправить проблему работы $router.push() в store?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В action'ах(и вообще в store) this, вполне очевидно, не указывает на текущий инстанс Vue(потому что какой для стора текущий?).

    Либо отдельно экспортируйте - импортируйте router, либо добавьте его в store.

    Ну а лучше не пихайте логику в хранилише. Хранилище должно хранить данные. Как поблажка - делать пред\постобработку(и то уже на грани). Получение же данных, логику переходов и всё такое прочее - вынесите в отдельный сервисный слой, никак не связанный с хранилищем.
    И похрен, что об этом говорят 100500 уроков от "гуру".
    Ответ написан
    1 комментарий
  • Как передать в props разное значение?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Я бы мог тебе сказать как это сделать, но факт в том, что этого делать не надо.
    На каждую сложную махинацию с элементами\компонентами ты должен заводить свой компонент\миксин, инкапсулирующий этот маленький кусочек функционала.
    1. Компонент ~data-modal, который экспортирует метод modal_open внутри которого вызывает modal_open обёрнутого v-modal-content, одновременно проставляя idelement.
    2. Компонент ~data-modal-control, который принимает пропс idelement и modal и внутри производит все махинации.
    3. Возможно это стоит вообще объединить в один компонент, если конопка открытия всегда соответствует модалке.
    Ответ написан
    Комментировать
  • Как динамически зарегистрировать локально новый компонент vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Вообще твоё решение должно работать. Если не работает, причём не сразу - надо дебажить и возможно репортить.

    Как обходной путь можно попробовать сразу их зарегистрировать всех(как динамические компоненты). Первый параметр Vue.component - имя можно через require.context получить, второй параметр - функция с import.
    Ответ написан
  • Поясните пожалуйста про активатор в tempalte vuetify?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Чувак, вот тебе документация. Читай.
    Документация Vue - это тебе не документация какого-нить Angular. Тут всё чётко, коротко, понятно и по делу.
    В отличие от обычной ситуации, если у тебя есть вопрос по Vue - в документации ты найдёшь ответ быстрее и понятнее, чем спросив.
    Ответ написан
    1 комментарий
  • Почему не работает пропс VUE?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Потому что <configurator :is-loading="true"/>:)
    Ответ написан
    4 комментария