Ответы пользователя по тегу Vue.js
  • Как правильно хранить и показывать отмеченные сущности во 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 комментария
  • Wordpress + vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Не привязывать к id? 0_o
    const app1 = new Vue({
      el: ".container-1",
    })
    const app2 = new Vue({
      el: ".container-2",
    })
    ...
    Ответ написан
    Комментировать
  • Как встроить vue компонент в html?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ты понимаешь, что в кавычки `` кладётся простой текст, а в this.showInfo у тебя функция?
    Это не заработает никогда.
    Почему это работает в .vue файлах внутри <template>? Потому что .vue - это не .js, это отдельный формат файла, использующий отдельный микроязык шаблонов, который компилируется в js.

    Простой, но плохой, вариант - использовать обычный html onclick указывающий на пошареную глобально функцию.
    Сложный вариант - сложный, надо думать и для начала разбираться с echarts - может что по-проще можно сотворить.

    ...upd:
    Да, можно сделать проще если почитать доки:
    Текст не нужен, tooltip formatter может возвращать HTMLElement и HTMLElement[].
    А значит можно просто сделать примерно так:
    formatter: (params) => {
      const span = document.createElement('span');
      span.onclick = this.showInfo;
      span.textContent = 'Ask Price';
    
      return [
        span,
        document.createTextNode(`: ${params.value[0]}`),
        document.createElement('br'),
        document.createTextNode(`Duration:  ${params.value[1]}`),
      ]
    }

    Можно даже намутить отдельно-стоящий vue-компонент, но не нужно.
    Ответ написан
  • Как лучше всего переиспользовать один компонент Vue между несколькими проектами?

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

    А так всё упирается в архитектуру. Просто(*играет бровями*) продумай своё решение так, чтоб его удобно было кастомизировать. Универсального решения нет. Главное помни все возможности Vue - миксины(или extends), слоты, пропсы, события, provide\inject и делай с расчётом на них.)
    Ответ написан
    Комментировать
  • Всплывающее окно bootstrap внутри vue js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Очевидное - невероятное: делаем раз - v-if=false, на странице нет никаких элементов, делаем два - для data-toggle="tooltip" элементов(которых нет) активируем возможность всплывашек, делаем три - v-if=true появляется свежий элемент который ни о чём не подозревает.

    Не мешайте в кучу совершенно разные подходы. Если пишете на vue - не трогайте ничего внутри vue извне. Пишите на jquery - не приплетайте vue. Если вам кровь из носу надо использовать jquery совместно с vue - делайте это не извне, а изнутри: создайте компонент-обёртку типа b-tooltip в котором на mounted активируйте ваш jquery.tooltip().
    Кстати за вас это давно сделано в bootstrap-vue.
    Ответ написан
  • Как мне сделать некоторое расстояние перед данными внизу графика?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Почему бы не почитать документацию: tickAmount?
    Ответ написан
    Комментировать