Как я могу передать переменную веб-компоненту при его создании?

У меня есть веб-компонент Login с полем LoginState. Я хочу передать экземпляр LoginState, который может быть настроен в какой-то другой части кода, и добавить его в экземпляр Login до/во время создания метода.

Это возможно? Если нет, то каковы мои альтернативы? Единственное, что я могу придумать, это использовать глобальную переменную, содержащую экземпляр LoginState, и ссылаться на него, что не кажется хорошей идеей.


person jtfairbank    schedule 07.03.2013    source источник


Ответы (1)


Это действительно возможно, при создании экземпляра вашего компонента используйте синтаксис

<x-custom-element a-field-name="{{expression}}"></x-custom-element>

Выражение будет оценено, и любое поле, определенное вами в классе CustomElement с именем aFieldName, будет инициализировано значением {{expression}} (см. соответствующее обсуждение). Лично я бы не советовал передавать что-то вроде вашего логина, так как это сделало бы ваш сайт невероятно уязвимым для атак XSS...

Возможно, лучшей идеей было бы открыть метод класса вашего компонента, который позволяет вам установить состояние входа в систему после инициализации. После вставки элемента в DOM вы можете получить доступ к полям элемента с помощью query('#myLoginStateId').xtag, а затем вызвать открытый метод с вашим состоянием входа.

Вы не сможете получить доступ к xtag элемента, пока он не будет вставлен в DOM, поэтому убедитесь, что вы вызываете соответствующее событие в методе insert() элемента, чтобы остальная часть вашего приложения знала, когда можно безопасно установить соответствующее поле.

person ovangle    schedule 07.03.2013
comment
Как мне поднять это событие? - person jtfairbank; 08.03.2013
comment
попробуйте недействительным вставленным () { var evt = новое событие (загрузить); это.dispatchEvent(evt); } Зарегистрируйте событие onLoad в контейнере вашего элемента и проверьте (evt.target.xtag), чтобы убедиться, что оно не равно null. В идеале вы должны использовать настраиваемый тип события, но... - person ovangle; 08.03.2013