Ответы пользователя по тегу Vue.js
  • Повесить обработчик на скрытый элемент?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Есть много способов сделать это разной паршивости, но правильный метод: сделать компонент-обёртку, который и навесит весь нужный функционал внутри себя.
    Самый примитивный пример:
    Vue.component('m-tooltip', {
      mounted() {
        const tooltip = M.Tooltip.init(this.$el, {enterDelay: 400});
        this.$once('hook:beforeDestroy', () => tooltip.destroy());
      },
      render() {
        return this.$slots.default
      }
    })
    Если нужно что-то большее - всегда можно усложнить.
    Ответ написан
  • Как переделать document.querySelectorAll под Vue.js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Правильный ответ: querySelectorAll никак не переделывается под Vue.
    Забудь про прямую с работу DOM. В Vue ты работаешь с данными и только данными. Изменения в данных автоматически отражаются на отображении, но отображение ты руками вообще не трогаешь.

    Если есть проблемы с пониманием - дай более конкретный пример, и тогда мы подскажем более конкретное решение.
    Ответ написан
    7 комментариев
  • Как запустить фронт и бэк на одном адресе?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если тебе это нужно для разработки - то тебе это не нужно.)
    Используй webpack devserver(из коробки в vue-cli) и настрой proxy до бэка. Для фронта всё будет "на одном сервере" и не нужно никаких заморочек.
    Ответ написан
  • Как принудительно открыть декстопную версию внутри iframe?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Подсмотрел такую фишку в codepen: задавать корню принудительно нужную ширину и использовать
    transform: scale(реальная ширина/установленная ширина)
    , вписывая обратно.

    А по поводу особого vue-фрейма - а собсвенно что такого вы от него хотите? Обычный фрейм справляется со своей задачей.)
    Ответ написан
    1 комментарий
  • Насколько правильно так перезаписывать свойство?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Перезаписывать не надо. Проверили все условия и присвоили разок.
    Если надо присваивать много - Object.assign вам в помощь.
    Ответ написан
    Комментировать
  • Как удалить теги?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В слот попадает не "разметка", а другой vue контент. Ищите место, где используется этот компонент(по #contents, v-slot:contents или slot='contents'), и там правьте.
    Хотя учитывая наличие ref - там и возможен говнокод, с вручную запиханой разметкой(искать по this.$refs.container), но сомнительно.

    В любом случае в vue вы работаете не с "тегами", а с данными. Удалять лишнее надо до того как оно отрисовано в vue.
    Ответ написан
    Комментировать
  • Кто знает в чем причина такой проблемы?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Запускать его надо не через обычный yarn serve, а через yarn electron:serve. Как и билдить. Читайте описание тех модулей, что подключаете.
    Ответ написан
    3 комментария
  • Компонент карта для Vuejs?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если совсем просто, можно утащить например отсюда карту мира в svg и навешать обработчики вручную.
    Если посложнее - оттуда же стащить geojson версию и использовать любую либу, умеющую с ним работать.
    Если слишком толстые карты - можно их прогнать через соответстующие оптимизаторы.
    Ответ написан
    Комментировать
  • Как собрать сложный проект на vue (с доп. модулями)? Правильно ли я это делаю?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Локальный модуль можно указывать через link: или через file:. В первом случае создаётся симлинк на модуль в node_modules, во втором модуль туда просто копируется. В первом случаем может не завестись по разным эзотерическим причинам, но если завелось - удобнее конечно использовать его.

    Если же использовать не npm, а yarn - добавляются ещё удобные варианты:
    1. yarn workspaces: вы кладёте несколько ваших модулей\приложений в один реп, и yarn собирает все зависимости в один node_modules и линкует использующийся модули туда же. В итоге отсутствует дубликация файлов и все модули работают с одними и теми же либами - что полезно в деве если используется расширение сторонних модулей. Очень удобно.
    2. yarn link: это чисто локальная фишка для разработки, вы делаете yarn link в корне одного модуля и он регистрируется глобально, после чего в другом модуле где хотите использовать делаете yarn link "имя" и он линкуется.
    Ответ написан
    1 комментарий
  • Vue - как встроенное приложение?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если не нужна поддержка IE11 и Safari - можно использовать web-компоненты и просто подключать стили внутри компонента - они инкапсулируются, иначе придётся покорячиться.

    Как это сработает с vuetify не скажу, но в похожей ситуации я использовал postcss-prefix-selector, просто добавив с помощью него короткий класс-префикс для всех стилей либы. Соответственно этот класс назначаешь на контейнер с vue и, при удаче, всё заработает.)

    Мне, увы, там ещё кастомный трансформ пришлось добавить для корневых (body, :root и т.п.) селекторов, попатчить саму либу местами и проследить чтобы теперь основные стили сайта не перебивали классы либы, но это уже отдельная история.)

    P.S. Для работы postcss-prefix-selector с vue-cli не обязательно вручную вкорячивать loader, можно его просто добавить в .postcssrc.js в plugins:
    require('postcss-prefix-selector')({
        prefix: '.prefix'
    }),
    Ответ написан
    2 комментария
  • Как подключать разные файлы sass переменных для одного проекта на Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Переменные удобнее всего подключать глобально через prependData.
    Соответственно и менять удобно в одном месте. По условию или ещё как.

    А вот как у вас три проекта в одном репозитории - вопрос отдельный.
    Ответ написан
    Комментировать
  • Как исправить ошибку Vue Js: "Error in nextTick: "NotFoundError: Failed to execute 'insertBefore' on 'Node'"?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Ну поищите где у вас по коду юзается insertBefore.
    Если не юзается, то теоретически это может быть из-за того, что как key в v-for попадаются дубликаты, но обычно это приводит к другим ошибкам.

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

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В getter - никак. В action - просто запускать action модуля А и await его. Чтоб не запускать action модуля A несколько раз - можно сделать дополнительно - проксируеще-кеширущий action-прокладку, который будет запускать нужный action один раз и пока не будет ответа - на все следующие запросы отдавать Promise текущего.
    Ответ написан
    Комментировать
  • Настроить PHPStorm для работы Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Используй vue create для создания проекта, выбирай eslint+prettier и PHPStorm всё сам как надо подтянет.
    Разве что может потребоваться установить опцию vueIndentScriptAndStyle в .eslintrc.js.
    Ответ написан
    3 комментария
  • Почему ругается TypeScript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Typescript работает только с кодом, он не знает что-там в Vue шаблоне, увы. Потому в $refs у него лежат голые компоненты Vue или Element'ы.
    Я лично вручную указываю через объединение интерфейсов - внизу добавляю перекрывающий:
    @Component
    export default class Login extends Vue { 
      // ...
    }
    export default interface Login {
      $refs: {
         loginForm: any; // на самом деле не any, а интерфейс компонента, поддерживающий нужные методы
      }
    }
    Ответ написан
    8 комментариев
  • Насколько данный метод обновления сообщений правильный?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если альтернатив со стороны сервера не предусмотрено(websocket или хотяб олдовый long polling), то только долбиться.
    Ответ написан
    Комментировать
  • Как массово инициализировать dropdown в vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Тупой вариант: как в циклом выводите, так в цикле инициализируйте(при v-for в this.$refs.dropdow лежит массив).
    Правильный вариант: сделать отдельный компонент m-dropdown, который внутри проводит всю нужную инициализацию и расставляет нужную вёрстку, после чего подключать циклом именно этот компонент.
    Идеальный вариант: использовать либы написанные на vue, дабы избежать лишнего оверхеда.
    Ответ написан
    Комментировать
  • Как создать новый элемент при событии на vue.js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В Vue все элементы должны быть заранее предусмотрены и подготовлены на своих местах.
    А дальше просто меняешь значение флага используемого в v-if/v-show или добавляешь в массив использованный в v-for. Никакой работы с элементами - вся работ только с данными.
    Ответ написан
    Комментировать
  • Как подключать плагины в vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Модуль распространяется в формате umd, так что нет никаких проблем использовать его без всяких сборок:
    Другое дело, что системы сборки вам стоит изучить и чем раньше тем лучше, т.к. первоначальные трудности с лихвой компенсируются последующим удобством.
    Ответ написан
    6 комментариев
  • Как изменить css в библиотеке, которую использует моё приложеине на netlify?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Стили же вручную подключаются, из описания:
    import 'vue-toast-notification/dist/theme-default.css';
    //import 'vue-toast-notification/dist/theme-sugar.css';

    Просто скопируй css в проект, изменяй и подключай напрямую: import './theme-default.css'; или типа того.
    Ну элементарная логика же.

    А изменения в node_modules в любом случае только локальны, в этом вся суть - не таскать код библиотек с кодом проекта. Если очень надо - можно сделать копию библиотеки и подключить через file:\link:, но это не ваш случай.
    Ответ написан
    Комментировать