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

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

    В итоге: props в свойствах маршрута может быть функцией. В эту функцию вы можете добавить как свой валидатор, так и приведение типов.
    Ответ написан
    Комментировать
  • Как сделать отдельный js файл на томже уровне что и dist?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если юзается vue-cli - то в проекте есть папочка public, кладите туда.
    Если чистый webpack - то нужен copy webpack plugin.
    Ответ написан
    Комментировать
  • Можно ли внутри шаблона увеличить переменную в data?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Технически можно, практически - нельзя. Она будет обновляться каждую перерисовку, и в vue вы перерисовку не контролируете, vue сам перерисовывает когда считает нужным. Можно предположить сколько и когда перерисовок будет, т.к. vue не рисует лишнего, но никаких гарантий.
    Ну и в целом шаблон - он для отображения, любые изменения внутри оного - надругательство над самой идеей.
    Ответ написан
    Комментировать
  • Как реализовать спряжения при помощи VueI18n?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ответ написан
    Комментировать
  • Как использовать снипетты в vue.js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Чувак, это называется циклы.
    Ответ написан
    Комментировать
  • Как получить корректный результат при рендеринге компонента?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ну, всё нормально, компонент никого не ждёт и монтируется себе синхронно. Когда запрос отработает тогда значение и будет. Поскольку это геттер - то vue всё обновит когда надо. Просто показывайте какой-нить спиннер пока currentTourGetter пуст.
    Ответ написан
    Комментировать
  • Как получить елемент внутри v-bind?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Начнём с того, что вы не должны лезть внутрь компонента-ребёнка из компонента-родителя. Никогда. Компонент-ребёнок - это чёрный ящик. Вы не знаете есть ли в нём вообще firstChild и что там у него со scrollHeight. Не знаете, говорю, даже если сами тот компонент написали. Это основа компонентного подхода: содержимое любого компонента может быть полностью переписано без влияния на зависимые от него родительские компоненты. Любое управление осуществляется через props, события (и, в особых случаях, докуметированные публичные методы и свойства, получаемые через ref).

    В данном случае вам нужно для ребёнка сделать компонент-обёртку(или поправить его самого), либо добавив свойство вроде set-height-by-child, которое и будет управлять данным поведением, либо, если нужна работа с этой высотой снаружи, посылать из него событие вроде @emit('scroll-height-changed', scrollHeight) при mounted, при изменении размера экрана и прочих возможных случаях.
    Ответ написан
    Комментировать
  • Как вставить в DOM динамический компонент Vue, находящийся в полученном по xhr html?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Правильный ответ: не грузить html с сервера. Серьёзно, это противоречит самой идее SPA. С сервера должны пилетать данные, хотя-бы как-то так:
    { 
      infoBlock: [{
        type: 'text',
        value: '...'
      },{
        type: 'component',
        value: 'review'
      },{
        type: 'text',
        value: '...'
      }]
    }
    а уже SPA разложит это всё на готовую разметку.

    Вредный ответ: Vue.compile().
    Ответ написан
    Комментировать
  • Как создать v-on: события?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Что вы пристали к этим директивам. Директивы - нишевая фича, нужная в специфических общих случаях. Если вы пишите директиву для одного компонента - вы делаете что-то не так(99%).

    Так вот @transitionend="mymethod" должно работать само по себе, без лишних телодвижений. В крайнем случае @transitionend.native="mymethod" если цель - другой компонент.
    Ответ написан
    2 комментария
  • Дата выводиться на ios NaN, а на остальных девайсах корректно. Почему и как справить?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В this.getCurrentDateRange.start лежит дата в формате непонятном IOS. Задавате конкретный формат явно:
    currentDate() {
      return moment(this.getCurrentDateRange.start, "YYYYMMDD(или какой там формат)").format('YYYY-MM-DD')
    },


    P.S. Да, даты на разных платформах И в разных браузерах работают по разному. Работать с ними надо исключительно явно, никогда не полагаясь на автоматическую угадайку. Даже если сейчас вдруг работает везде, не факт что внезапно не сломают.
    Ответ написан
    5 комментариев
  • Vue.js как работать с изображениями в assets?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Предполагается что html особо не динамичен. По сути вся фишка в обаботки динамических импортов файлов зависит от соответствующих webpack loader'ов. SCSS loader для каждого url вида ~@path вызывает(условно) require(path) и делает соответствующую магию(обычно это для мелких файлов: url-loader, который инлайнит файл как data: URI, для крупных: file-loader, который копирует файлы в соответствующую расширению папочку и добавляет к имени хэш). HTMLWebpackLoader не трогает подключаемые ресурсы, в т.ч. картинки. Просто юзайте картинки в том же scss, а внутри html назначайте соответствующее классы. Или кладите нужны для html картинки сразу в public, да.
    Ответ написан
    Комментировать
  • Как решить этот warning в render()?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    5 комментариев
  • Как исправить пустую страницу в npm run build?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    // vue.config.js
    module.exports = {
      publicPath: './'
    }
    Ответ написан
    Комментировать
  • Как использовать компоненты в data?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    v-html - только для обычного html. И то использовать надо только когда без него совсем никак.
    Vue работает с данными, а не разметкой, разметка строится сама на основе данных.
    В твоём случае в самом шаблоне должно быть:
    ...
    <component :is="value">{{name}}</component>
    ...

    А в data, соотвтественно:
    ...
    {
      id: 2,
      name: this.$t("Email"),
      value: `LinkElement`
    }
    ...
    Ответ написан
    Комментировать
  • Как рендерить vue-компонент?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    И всё же правильный ответ - передавать данные, рисовать на их основе. Передача разметки - это очень плохо.
    Но если очень хочется: Vue.compile().
    Ответ написан
    Комментировать
  • Как правильно удалить из массива объект по ключу?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Основы js изучите, пожалуйста.
    removeChild(items, child) {
      if(!Array.isArray(items) || !child) 
        return items;
    
      for(let i = items.length; i--;) {
        const { id, children } = items[i];
        
        if(id === child.id)
          items.splice(i, 1);
        else
          this.removeChild(children, child);
      }
    
      return items;
    }
    Ответ написан
    Комментировать
  • Почему не срабатывает nextTick?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ну потому что smooth. $nextTick - это не какое-то абстрактное "когда всё закончилось", это буквально следующий тик vue, который наступит через пару миллисекунд. smooth к тому времени только начнёт крутить.
    Ответ написан
  • Из-за чего ошибка при использовании docxtemplater и JSZip/PizZip?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    А у тебя есть этот файл в ../assets/tag-example.docx на сервере? Скорее всего нет.
    Ответ написан
  • Как связать модель товара и ее цвета?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    <v-card>
      <v-card-title>Выберите модель</v-card-title>
      <v-btn-toggle class="mb-10" v-model="currentButton">
        <v-btn color="#546E7A" :key="btn.id" v-for="btn in btnModelInfo">{{btn.name}}</v-btn>
      </v-btn-toggle>
      <!-- Здесь должно менять изображение в зависимости от выбранного цвета-->          
      <v-btn-toggle>
        <v-btn :color="color" :key="name" v-for="[name, color] in currentColors" @click="changeColor(name)"></v-btn>  
      </v-btn-toggle>     
    </v-card>


    {
      data() {
        return {
          btnModelInfo: [
            {id: '1', name: 'model_1' , colors: ['white', 'blue', 'red']},
            {id: '2', name: 'model_2' , colors: ['red', 'green', 'blue']},
          ],
          allColors: {
            white: '#ffffff',
            blue: "#0000ff ",
            red: '#ff0000',
            green: '#00ff00',
          },
          currentButton: null
        }
      },
      computed: {
        currentColors() {
          return this.currentButton === null ? [] : this.btnModelInfo[this.currentButton]
            .colors
            .map(name => [name, this.allColors[name]]);
        }
      },
      methods: {
        changeColor(color) {
          //Здесь должно менять изображение в зависимости от выбранного цвета
        }
      }
    }
    Ответ написан
    Комментировать
  • Как сделать динамический импорт библиотеки внутри метода в vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Возможно. Ты сам написал как. Дальше обычная асинхронность, к Vue или сборщикам отношения не имеет.
    spoiler
    methods: {
            async generatePDF() {
                const html2pdfd = await import("html2pdf" /*webpackChunkName:"html2Pdf"*/);
                html2pdfd()
            },
            ...
    }

    или
    methods: {
            generatePDF() {
                import("html2pdf" /*webpackChunkName:"html2Pdf"*/).than(html2pdfd => {
                    html2pdfd()
                })
            },
            ...
    }


    Ответ написан
    6 комментариев