Size: a a a

Клуб Vue.js-разработчиков

2021 February 18

М

Михаил in Клуб Vue.js-разработчиков
Такой вопрос: как мне правильно прослушать событие filterUsers, если в компоненте FirstComponent мне нужно вызвать этот метод?
<FirstComponent>
 <SecondComponent>
   <template #default="{ filterUsers }">
     <SomeOtherComponent
       @change="filterUsers"
     />
   </template>
 </SecondComponent>
</FirstComponent>

SecondComponent:
<div>
 <slot :filterUsers="filter"></slot>
</div>

То есть сейчас у меня событие filterUsers прослушивается, но в компоненте FirstComponent метод уже не вызывается
источник

VS

Vitaly Slobodin in Клуб Vue.js-разработчиков
ой, там я :}
источник

AA

Andrew AN in Клуб Vue.js-разработчиков
Дак да, бутстрап же так же подключают видел, а потом кнопочки меняют в скопед, где применяли общие классы
источник

SL

Stanislav Lashmanov in Клуб Vue.js-разработчиков
Vitaly Slobodin
ой, там я :}
Мам, я в телевизоре
источник

SL

Stanislav Lashmanov in Клуб Vue.js-разработчиков
Vitaly Slobodin
ой, там я :}
read/writeFragment то доделал? :)
источник

VS

Vitaly Slobodin in Клуб Vue.js-разработчиков
Stanislav Lashmanov
read/writeFragment то доделал? :)
Это Илья мне писал :))
источник

IK

Illya Klymov in Клуб Vue.js-разработчиков
Stanislav Lashmanov
read/writeFragment то доделал? :)
Это я доделал
источник

IK

Illya Klymov in Клуб Vue.js-разработчиков
А то от управления локальным состоянием в аполло у меня волосы дыбом встают
источник

И

Иван in Клуб Vue.js-разработчиков
Lumen
немного не понял..
мне надо положить данные в data() этого же компонента, в котором mounted()
стрелочная запись функции прокидывает this в колбэк
вроде весь контекст привязан...
Нет, привязка нужна явная. Через bind или замыкание, например:
mounted(){
  const _this = this;
   window.addEventListener("select-item", (event) => {
       _this.selectedItem = event.detail;
   });
}
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
Иван
Нет, привязка нужна явная. Через bind или замыкание, например:
mounted(){
  const _this = this;
   window.addEventListener("select-item", (event) => {
       _this.selectedItem = event.detail;
   });
}
так точно не надо
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
как минимум потому, что вы потом не удалите этот обработчик
источник

AA

Andrew AN in Клуб Vue.js-разработчиков
Иван
Нет, привязка нужна явная. Через bind или замыкание, например:
mounted(){
  const _this = this;
   window.addEventListener("select-item", (event) => {
       _this.selectedItem = event.detail;
   });
}
Здается мне наоборот: event.detail= _this.selectedItem
источник

И

Иван in Клуб Vue.js-разработчиков
Anton Permyakov
как минимум потому, что вы потом не удалите этот обработчик
Как Вам такой вариант?

methods: {
 updateSelectedItem(event) {
   this.selectedItem = event.detail;
 },
},
mounted(){
   const handler = this.updateSelectedItem.bind(this);
   window.addEventListener("select-item", (event) => {
       handler(event);
   });
}
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
Иван
Как Вам такой вариант?

methods: {
 updateSelectedItem(event) {
   this.selectedItem = event.detail;
 },
},
mounted(){
   const handler = this.updateSelectedItem.bind(this);
   window.addEventListener("select-item", (event) => {
       handler(event);
   });
}
точно так же, функция анонимная, ее не удалить
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
а вот сендбокс, в котором и стрелка, и метод работают
источник

И

Иван in Клуб Vue.js-разработчиков
Anton Permyakov
точно так же, функция анонимная, ее не удалить
Точно )

methods: {
 updateSelectedItem(event) {
   this.selectedItem = event.detail;
 },
},
mounted(){
   const handler = this.updateSelectedItem.bind(this);
   window.addEventListener("select-item", handler);
}

Вроде, так
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
Иван
Точно )

methods: {
 updateSelectedItem(event) {
   this.selectedItem = event.detail;
 },
},
mounted(){
   const handler = this.updateSelectedItem.bind(this);
   window.addEventListener("select-item", handler);
}

Вроде, так
нет, bind создаст новую функцию
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
и он там не нужен вообще
источник

AP

Anton Permyakov in Клуб Vue.js-разработчиков
по-моему Илья говорил, что вью автоматически биндит свои методы
источник