Регистрация  |  Вход

LWC - send Event from parent to child

Собственно вопрос.

Как послать в обратную сторону я знаю и это работает чудесно.

pubsub не хотелось бы использовать

Собственно вопрос. 

Как послать в обратную сторону я знаю и это работает чудесно.

pubsub не хотелось бы использовать

Добавь атрибут в child и подпишись на его обновление, через сеттер. А в parent просто проставляй атрибут.

Добавь атрибут в child и подпишись на его обновление, через сеттер. А в parent просто проставляй атрибут.

Gres
Добавь атрибут в child и подпишись на его обновление, через сеттер. А в parent просто проставляй атрибут.

Можно, но хочется по красивому все сделать...

[quote="Gres"]Добавь атрибут в child и подпишись на его обновление, через сеттер. А в parent просто проставляй атрибут.[/quote]

Можно, но хочется по красивому все сделать...

Похоже не судьба мне бродкаст послать

pubsub listeners need a "@wire(CurrentPageReference) pageRef" property
при этом код :

import { LightningElement, track, api, wire } from 'lwc';
import { CurrentPageReference } from 'lightning/navigation';
import { registerListener, unregisterAllListeners } from 'c/pubsub';

export default class TabManager extends LightningElement {
@wire(CurrentPageReference) pageRef;

connectedCallback() {
// subscribe to event
registerListener('broadcast', this.handleEvents, this);
}
}

Причем есть похожий компонент и там используется fire без проблем.

Похоже не судьба мне бродкаст послать

[b]pubsub listeners need a "@wire(CurrentPageReference) pageRef" property[/b]
при этом код :

[code]
import { LightningElement, track, api, wire } from 'lwc';
import { CurrentPageReference } from 'lightning/navigation';
import { registerListener, unregisterAllListeners } from 'c/pubsub';

export default class TabManager extends LightningElement {
    @wire(CurrentPageReference) pageRef;
    
    connectedCallback() {
        // subscribe to event
        registerListener('broadcast', this.handleEvents, this);
    }
}
[/code]

Причем есть похожий компонент и там используется fire без проблем.

В общем проблема скорее всего кроется в том что я запускаю LWC внутр VF

В общем проблема скорее всего кроется в том что я запускаю LWC внутр VF

document.addEventListener('broadcast', this.handleEvents, false); - позволяет обмениваться сообщениями, но в этом случае мы теряем scope(this)

document.addEventListener('broadcast', this.handleEvents, false); - позволяет обмениваться сообщениями, но в этом случае мы теряем scope(this)

Ну наконец то началась движуха на LWC тему, может потихоньку и освоим тему.

мне тоже интересно, как это сделать, в том примере с Bike application что я делал, кастомный эвент всплывает до корневого компонента, а потом данные присовываются в компонент соседней ветки через его атрибут. Но в теории эвент должен достигать все компоненты, помню в Ауре было что-то вроде scope у кастомного эвента, определяющей как далеко эвент "расходится" по приложению.

Кстати в чистом Web Components, атрибуты компоненты и сеттеры его JS класса - это разные вещи, а в LWC это одна и та же вещь.

Ну наконец то началась движуха на LWC тему, может потихоньку и освоим тему.

мне тоже интересно, как это сделать, в том примере с Bike application что я делал, кастомный эвент всплывает до корневого компонента, а потом данные присовываются в компонент соседней ветки через его атрибут. Но в теории эвент должен достигать все компоненты, помню в Ауре было что-то вроде scope у кастомного эвента, определяющей как далеко эвент "расходится" по приложению.

Кстати в чистом Web Components, атрибуты компоненты и сеттеры его JS класса - это разные вещи, а в LWC это одна и та же вещь.



wilder
Можно, но хочется по красивому все сделать...

Что значит по красивому?
В LWC коммуникация идёт по принципу:
вниз - через проперти или через паблик функции чайлда
вверх - через ивенты
pubsub это игрушка не для прода, а скорее для ознакомления. Если я не ошибаюсь, то они уже сделали его официальную альтернативу. Пока не дошли руки пощупать новинку, т.к. в принципе не было необходимости.

[quote="wilder"]Можно, но хочется по красивому все сделать...[/quote]

Что значит по красивому?
В LWC коммуникация идёт по принципу:
вниз - через проперти или через паблик функции чайлда
вверх - через ивенты
pubsub это игрушка не для прода, а скорее для ознакомления. Если я не ошибаюсь, то они уже сделали его [url=https://releasenotes.docs.salesforce.com/en-us/winter20/release-notes/rn_lc_message_channel.htm?edition=&impact=]официальную альтернативу[/url]. Пока не дошли руки пощупать новинку, т.к. в принципе не было необходимости.


Буду разбираться. Отпишусь

Буду разбираться. Отпишусь

Developer
Если я не ошибаюсь, то они уже сделали его официальную альтернативу. Пока не дошли руки пощупать новинку, т.к. в принципе не было необходимости

Из того что я вижу, альтернатива так себе.

[quote="Developer"]Если я не ошибаюсь, то они уже сделали его официальную альтернативу. Пока не дошли руки пощупать новинку, т.к. в принципе не было необходимости[/quote]

Из того что я вижу, альтернатива так себе.

wilder
Из того что я вижу, альтернатива так себе.

Самому интересно узнать детали, т.к. пока загружен другой работой и не до этого

[quote="wilder"]Из того что я вижу, альтернатива так себе.[/quote]

Самому интересно узнать детали, т.к. пока загружен другой работой и не до этого :) 

Developer
В LWC коммуникация идёт по принципу:

1. через проперти. Я так понимаю, через render() отлавливаем?
2. через паблик функции чайлда - я не знаю их, поэтому мне и нужен broadcast

[quote="Developer"]В LWC коммуникация идёт по принципу:[/quote]
1. через проперти. Я так понимаю, через render() отлавливаем?
2. через паблик функции чайлда - я не знаю их, поэтому мне и нужен broadcast

1) это значит что все проперти, которые мы передаём в чайлд известны ему и могут быть использованы для работы. Если важно знать момент изменения проперти, то можно хранить в чайлде state и оценивать его в renderedCallback
2) т.е. доступа в чайлд компоненту нет?

1) это значит что все проперти, которые мы передаём в чайлд известны ему и могут быть использованы для работы. Если важно знать момент изменения проперти, то можно хранить в чайлде state и оценивать его в renderedCallback
2) т.е. доступа в чайлд компоненту нет?

Кто-то себе уже взял курс одного парня из солнечной странны:) влом искать по нету, нужен для начало интрадакшен в LWC

Кто-то себе уже взял курс одного парня из солнечной странны:) влом искать по нету, нужен для начало интрадакшен в LWC

Developer
1) это значит что все проперти, которые мы передаём в чайлд известны ему и могут быть использованы для работы. Если важно знать момент изменения проперти, то можно хранить в чайлде state и оценивать его в renderedCallback
2) т.е. доступа в чайлд компоненту нет?
Developer
2) т.е. доступа в чайлд компоненту нет?

Они все динамические и их может быть много.

[quote="Developer"]1) это значит что все проперти, которые мы передаём в чайлд известны ему и могут быть использованы для работы. Если важно знать момент изменения проперти, то можно хранить в чайлде state и оценивать его в renderedCallback
2) т.е. доступа в чайлд компоненту нет?[/quote][quote="Developer"]2) т.е. доступа в чайлд компоненту нет?[/quote]

Они все динамические и их может быть много.

wilder
Они все динамические и их может быть много.

Динамические проперти в lwc?
Даже стало интересно. А можно пример кода?

[quote="wilder"]Они все динамические и их может быть много.[/quote]

Динамические проперти в lwc? :) 
Даже стало интересно. А можно пример кода?

Developer
wilder
Они все динамические и их может быть много.

Динамические проперти в lwc?
Даже стало интересно. А можно пример кода?

Не проперти динамические, а children, их может быть много и они могут быть разные.

Понятно что во всех из них я могу определить метод с одним и тем же названием, но хотелось бы этого избежать

[quote="Developer"][quote="wilder"]Они все динамические и их может быть много.[/quote]

Динамические проперти в lwc? :) 
Даже стало интересно. А можно пример кода?[/quote]

Не проперти динамические, а children, их может быть много и они могут быть разные.

Понятно что во всех из них я могу определить метод с одним и тем же названием, но хотелось бы этого избежать

Мне кажется, что в данной ситуации нужно обсудить всю архитектуру приложения с командой людей, которые работают над ним. Тут прямо напрашивается мозговой штурм и форум не очень удобен, т.к. желательно личное присутствие людей или хотя бы созвон

Мне кажется, что в данной ситуации нужно обсудить всю архитектуру приложения с командой людей, которые работают над ним. Тут прямо напрашивается мозговой штурм и форум не очень удобен, т.к. желательно личное присутствие людей или хотя бы созвон :) 

Developer
Мне кажется, что в данной ситуации нужно обсудить всю архитектуру приложения с командой людей, которые работают над ним. Тут прямо напрашивается мозговой штурм и форум не очень удобен, т.к. желательно личное присутствие людей или хотя бы созвон :)

Архитектор, программист и по совместительству дизайнер, это один и тот же человек:)

Использовал в итоге вариант номер 2 :)

[quote="Developer"]Мне кажется, что в данной ситуации нужно обсудить всю архитектуру приложения с командой людей, которые работают над ним. Тут прямо напрашивается мозговой штурм и форум не очень удобен, т.к. желательно личное присутствие людей или хотя бы созвон :)[/quote]

Архитектор, программист и по совместительству дизайнер, это один и тот же человек:)

Использовал в итоге вариант номер 2 :)

я конечно не пробовал
но нельзя ли сделать просто в чайлде субскрайб на ивент
а в паренте dispatch?

ну то есть точно так как это работает в обычном жаваскрипте?

document.addEventListener('LWC_NEEBOWIY_EVENT', function (e) {

console.log(e.detail);

}, false);

let ev = new CustomEvent('LWC_NEEBOWIY_EVENT', {
detail: {

}
});
document.dispatchEvent(ev);

я конечно не пробовал
но нельзя ли сделать просто в чайлде субскрайб на ивент
а в паренте dispatch?

ну то есть точно так как это работает в обычном жаваскрипте?

[code]
document.addEventListener('LWC_NEEBOWIY_EVENT', function (e) {

			console.log(e.detail);

		}, false);
[/code]

[code]
let ev = new CustomEvent('LWC_NEEBOWIY_EVENT', {
            detail: {

            }
        });
        document.dispatchEvent(ev);

[/code]

Maxim Elets
ну то есть точно так как это работает в обычном жаваскрипте?

wilder
document.addEventListener('broadcast', this.handleEvents, false); - позволяет обмениваться сообщениями, но в этом случае мы теряем scope(this)

[quote="Maxim Elets"]ну то есть точно так как это работает в обычном жаваскрипте?[/quote]

[quote="wilder"]document.addEventListener('broadcast', this.handleEvents, false); - позволяет обмениваться сообщениями, но в этом случае мы теряем scope(this)[/quote]