#29 Попап и промисы - Vue.js: практика

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ก.ย. 2024
  • Присоединяйтесь к нашему сообществу в Телеграм - t.me/vuejs_club
    Код из видео: codesandbox.io...
    ---
    Видео создано благодаря подписчикам проекта на нашем Patreon.
    Хотите получать контент на 3 месяца раньше остальных? Присоединяйтесь! / javascriptninja

ความคิดเห็น • 84

  • @SuperRoqsta
    @SuperRoqsta 3 ปีที่แล้ว +41

    Я дико извиняюсь! А когда продолжение?

  • @maksymgapachilo9507
    @maksymgapachilo9507 3 ปีที่แล้ว +13

    Читал про refs, но плохо читал, и не знал что можно через refs, у родителя вызивать метод ребенка.Искал неделю), прям топ видео))

  • @ablbaltabekov9083
    @ablbaltabekov9083 3 ปีที่แล้ว +7

    Наконец-то вышла тема про флажки и попапы. У нас все делают через флажки и создают их ну очень много. Сам я реализовывал через добавление в класс active. Ну не мог что то лучше придумать. Спасибо что затронули эту тему

  • @MrAkhmat
    @MrAkhmat 2 ปีที่แล้ว +1

    Спасибо Илья. Позволю себе оценить ваше изложение знаний. Это по факту очень эффективный подход. Думаю вы сами дошли до этого, конечно пропустив через себя много теории по обучению и прочему. У вас от природы есть предрасположенность к обучаемости и обучению. Вы погружаетесь в предметную область доходя до самой сути, становитесь ее "мастером". Больше вдохновляет не сам вью (который, видно, делался с душой, очень удобный инструмент и маст хев для современного веб программиста), а сама подача материала. Боюсь, после ваших видеокурсов, планка требований к излагающему видеокурс будет высокой. Посмотрел видеокурсов некоторое количество, но такой подачи материала нет ни у кого. Жаль что наткнулся на вас поздно, ожидал что будет очередной видеокурс. но он не очередной.

  • @PavelSmirnov-u5v
    @PavelSmirnov-u5v 3 ปีที่แล้ว +3

    Спасибо, Илья!

  • @AlexKozack
    @AlexKozack 3 ปีที่แล้ว +5

    Для доступа к методам дочернего компонента сейчас ведётся работа над специальными функциями `expose` и `defineExpose` для Composition API и `` соответственно. Скорее всего их уже можно использовать. Так что не так с этим всё страшно и костыльно =)

  • @gerasim_vol
    @gerasim_vol 3 ปีที่แล้ว +1

    дякую за відео. з нетерпінням чекаю на нові випуски.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +2

      Сегодня или завтра.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +8

      Сегодня или завтра наступает! С днём рождения меня 🎂

    • @DimaNaks
      @DimaNaks 3 ปีที่แล้ว +1

      @@JavaScriptNinja с днем рождения, Илья!

  • @xfirab
    @xfirab ปีที่แล้ว

    Спасибо классный урок получился

  • @alexanonymous5823
    @alexanonymous5823 3 ปีที่แล้ว

    спасибо большое за видео, очень интересная тема рефы, нужно будет с ними разобраться, пока что немного сбит с толку с этими попапами, но разберусь=)) спасибо еще раз=))

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 ปีที่แล้ว +2

    Спасибо!

  • @lastchancehider
    @lastchancehider 3 ปีที่แล้ว +2

    спасибо вам!

  • @ПавлоТимощук-ш8й
    @ПавлоТимощук-ш8й 3 ปีที่แล้ว

    Довольно длительный период пытался найти оптимальный вариант реализации попапов.
    Было много прочитано статьей на эту тему. В одной из них нашел вариант с refs, который Вы показали. Моя реализация заключается в том, что я сделал компонент-обвертку. В этом компоненте у меня вся логика открытия и закрытия попапа и каркас, в который вкладываю другие компоненты попапов. В каждом из них лежит свой html и своя логика. Эти попапы открываю через переменную с их названием. При открытии передаю название нужного попапа.
    При реализации этого подхода столкнулся с таким моментом, что refs работают только в одном компоненте и не всплывают до app.js. Если хочешь обратиться к компоненту, то он должен быть, так сказать, на виду)

    • @neyasbltb
      @neyasbltb 3 ปีที่แล้ว

      Даже не представляю, как рефы могли бы "всплывать")

    • @ПавлоТимощук-ш8й
      @ПавлоТимощук-ш8й 3 ปีที่แล้ว

      @@neyasbltb Согласен. Это просто мои наблюдения в процессе понимания Vue.

  • @gleb_04
    @gleb_04 3 ปีที่แล้ว +5

    когда продолжение?

  • @vdvchannel7765
    @vdvchannel7765 ปีที่แล้ว +1

    Очень и очень поверхностное рассмотрение. модалка это исскуство

  • @timkhusainov7407
    @timkhusainov7407 3 ปีที่แล้ว

    Очень годная библиотека, до этого юзал vue-modal но оно не очень нравилось тем что для создания простого окна надо много действий делать, тут все проще

  • @sergeyharchenko5116
    @sergeyharchenko5116 2 ปีที่แล้ว

    Отличное видео, смотреть как пишет код опытный программист - нереальный кайф

  • @xeleos
    @xeleos 3 ปีที่แล้ว

    Тоже глянул после курса Минина )) жду продолжение, очень интересно получается!

  • @DimaNaks
    @DimaNaks 3 ปีที่แล้ว +3

    Я пока только на середине курса и сюда зашел просто чтобы спросить - подскажите пожалуйста, а когда будут новые видео? Уж очень интересный курс получился!

  • @vovchisko-dev
    @vovchisko-dev 3 ปีที่แล้ว +6

    Забыл Reject при внезапном уничтожении родителя попапа, например в результате работы роутера.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +7

      Да, хорошее замечание. Сценарий очень редкий в данном кейсе, но стоит внимания

  • @АлександрЛобков-н7о
    @АлександрЛобков-н7о 3 ปีที่แล้ว +1

    Сделал у себя на проекте реализацию диалоговых окон на промисах еще 2.5 года назад. И все прекрасно работает. Только я не использую ref.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว

      Без рефов не получится подставлять произвольный html в слоты, а это большой минус по гибкости

    • @АлександрЛобков-н7о
      @АлександрЛобков-н7о 3 ปีที่แล้ว +1

      @@JavaScriptNinja А зачем через рефы подставлять? Слоты работают как и обычные слоты во вью. Я использоаал без рефа чтобы вызвать функцию открытия диалога.

    • @АлександрЛобков-н7о
      @АлександрЛобков-н7о 3 ปีที่แล้ว +1

      Кстати могут быть кейсы когда надо вызвать диалог сразу же монтирования родительского компонента и при обращении рефа еще может не существовать. Например подгрузка диалога идет через асинхронный чанк.

  • @zenkovr
    @zenkovr 3 ปีที่แล้ว +2

    А почему не пойти с этой идеей дальше и не убрать Popup из разметки? Модальный компонент можно создавать внутри "сервиса" и монтировать его куда угодно - например к .

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +8

      Терпение, на курсе ещё не рассказали о телепорте и о provide/inject
      Но сразу поясню - если вы уберете его из разметки вы лишитесь возможности гибко настраивать попап

    • @jackdrengr5069
      @jackdrengr5069 3 ปีที่แล้ว

      Мы так сделали у себя на проекте. Минусы: нельзя гибко из родителя попап, а самое главное - Vue ооочень не любит, когда вы руками что-то монтируете в DOM. Так например изначально подобные попапы были не видны во VueDevtools.

  • @RuslanDasaev-f7f
    @RuslanDasaev-f7f 3 ปีที่แล้ว +1

    Использую модалку от vuetify, и там она закрывается автоматически при нажатии на backdrop. Допустимо ли не резолвить промис, при нажатии на backdrop?

  • @vitaliy.artyukh
    @vitaliy.artyukh 3 ปีที่แล้ว +1

    фокус на инпуте, казалось бы что может быть проще. но фокус инпута в модальном окне, которое еще имеет анимацию при открытии не такая и тривиальная задача.
    если в директиве в блоке inserted обратится к элементу и выставить фокус то это не работает, вероятно когда анимация еще не закончилась то компонент еще не создался или еще что-то.
    Evan советовал так:
    bind(el, binding, context) {
    context.componentInstance.$once('hook:attached', () => {
    input.focus();
    });
    },
    но это также не работает.
    единственный рабочий способ это setTimeout.
    возможно я еще чего-то не знаю.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว

      Использовать директивы - очень плохая идея для управления подобными вещами

    • @ravetherover
      @ravetherover 3 ปีที่แล้ว

      nextTick может быть как-то полезен в этой ситуации?

  • @РМахиев
    @РМахиев 3 ปีที่แล้ว +2

    Здравствуйте Илья. Прежде всего благодарю Вас за курс. Будет ли его продолжение или на этом видео он закончен?

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +3

      Не закончен, будет

    • @rasulberov8093
      @rasulberov8093 3 ปีที่แล้ว +1

      @@JavaScriptNinja Хорошая новость. Спасибо за ответ

  • @greenvirsdev7820
    @greenvirsdev7820 3 ปีที่แล้ว

    Можно избавиться от ref, просто добавив slot scoped с именем например activator. Передать этому слоту функцию open и в родителе ее вызывать.

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +1

      Только если активация происходит непосредственно из шаблона

    • @greenvirsdev7820
      @greenvirsdev7820 3 ปีที่แล้ว

      @@JavaScriptNinja да, но это один из подходов, что ты не злоупотреблять ref. И это так же оставит возможность управлять popup через ref.

  • @БорисСизов-д5ь
    @БорисСизов-д5ь 3 ปีที่แล้ว

    Большое спасибо за курсы! У меня появился вопрос, помогите пожалуйста: У меня есть элемент input (TheInput), это мой кастомный ввод. Я разделил criptonomicon на компоненты и одним из компонентов выделил фильтрацию с пагинацией, причем так как у меня нет стора переменная filter хранится в App.vue. Она передается сначала в компонент фильтрации, а из него в компонент TheInput и при изменении input выдаются ошибки и не меняется переменная filter. Почему?(((

  • @alimslimmer1751
    @alimslimmer1751 3 ปีที่แล้ว

    Охх, до этой главы я наверно через полгода только доберусь

  • @sergiishilingov5609
    @sergiishilingov5609 3 ปีที่แล้ว +1

    Интересная реализация с промисом. Для сравнения - заэмитить confirm, обработать в родителе. После в родителе через ref закрыть попап. Какие есть преимущества у варианта с промисом?

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +1

      "в родителе через ref" закрыть попап - это плохая идея

    • @sergiishilingov5609
      @sergiishilingov5609 3 ปีที่แล้ว

      @@JavaScriptNinja Почему?

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว +1

      @@sergiishilingov5609 потому что тогда мы приходим к тому же варианту с дроблением логики, с которого начали. Не стоит их смешивать

  • @silveringreviews
    @silveringreviews 2 ปีที่แล้ว +1

    Property 'open' does not exist on type 'unknown'

    • @JavaScriptNinja
      @JavaScriptNinja  2 ปีที่แล้ว +1

      Что поделать, слабость тайпскрипта и вью )

  • @deanArtDev
    @deanArtDev 3 ปีที่แล้ว

    Инетесно, хорошая ли идея когда у тебя модалка из 3 и более шагов передовать в resolve("nameStap") и уже опираться на это значение для понимание на каком ты шаге и рисовать соответвущий компонент?

    • @alexs7931
      @alexs7931 3 ปีที่แล้ว +1

      В итоге нужно будет делать что-то вроде
      {stepName:"1", data{ field1: 123}}
      В видео упрощённый вариант для быстрого понимания.

    • @neyasbltb
      @neyasbltb 3 ปีที่แล้ว +2

      Нет, потому что resolve одноразовый. Максимум, туда можно передавать имя шага, на котором решили закрыть модалку

  • @ИзиБризи-с1х
    @ИзиБризи-с1х 3 ปีที่แล้ว

    Я надеюсь это не последнее видео в данном курсе?

  • @Peter-vz4tb
    @Peter-vz4tb 3 ปีที่แล้ว +1

    Промис который каким-то образом сохраняется в методе, а потом неожиданно вызывается - ни-на не понятно.

  • @silveringreviews
    @silveringreviews 2 ปีที่แล้ว +1

    16:30 какие крутилки? Что происходит? Убейте меня

  • @MrAlexander446
    @MrAlexander446 3 ปีที่แล้ว

    а почему не вынести константу из $options просто в константу выше перед export default у компонента (CONFIRMATION_TEXT)? мы же не используем константу в html

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว

      Используем в плейсхолдере

    • @MrAlexander446
      @MrAlexander446 3 ปีที่แล้ว

      @@JavaScriptNinja оу, плохо следил, спасибо))

  • @deanArtDev
    @deanArtDev 3 ปีที่แล้ว

    Илья, а для патрионов продолжение уже есть?

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว

      Нет, этот курс к патреону никакого отношения не имеет, я не пытаюсь вам что-то продать :)

    • @deanArtDev
      @deanArtDev 3 ปีที่แล้ว

      @@JavaScriptNinja не в этом дело, если бы можно было заплатить и продолюить курс было бы даже лучьше =) Все на много прозаичнее, курс хороший и хочется продолжения =)

  • @Nikolaevichful
    @Nikolaevichful ปีที่แล้ว

    Аж прийшло просвітлення!! Цікаво чи в реакті можливо таке реалізувати, а то по флажку відкривати модалку, після цього відео, не найс.

  • @samesadface
    @samesadface 3 ปีที่แล้ว

    Не понимаю почему люди не используют dialog-polyfill

    • @JavaScriptNinja
      @JavaScriptNinja  3 ปีที่แล้ว

      Потому что у нее тоже свои проблемы. И как применение тега dialog решит задачу построения flow с ожиданием попапа

    • @samesadface
      @samesadface 3 ปีที่แล้ว +1

      @@JavaScriptNinja Написал коммент в начале видео. И там была проблема, которая легко решается его использованием. Предотвращение перехода фокуса по tab за пределы модального окна. А какие у него есть проблемы?

  • @ДенисДроздов-п1э
    @ДенисДроздов-п1э 2 ปีที่แล้ว +1

    Читер))