해당 요소가 DOM에 한 번 첨부 된 후에도 작동하는 로그 아웃 페이지를 만들려고합니다. 이것은 로그인 한 다음 로그 아웃 한 다음 다시 로그인하고 다시 로그 아웃하려고 할 때 발생합니다.폴리머 2 - 철자/철제 선택기를 통해 요소가 표시 될 때마다 작업 수행
예를 들어, 쉘은 나는 또한 셸에서 페이지 변경에 대한 관찰자가
<iron-selector selected="[[page]]" attr-for-selected="name">
<a name="logout" href="[[rootPath]]logout">
<paper-icon-button icon="my-icons:sign-out" title="Logout" hidden$="[[!loggedIn]]"></paper-icon-button>
</a>
<a name="login" href="[[rootPath]]login">
<paper-icon-button icon="my-icons:sign-in" title="Login" hidden$="[[loggedIn]]"></paper-icon-button>
</a>
</iron-selector>
<<SNIP>>
<iron-pages selected="[[page]]" attr-for-selected="name" fallback-selection="view404" role="main">
<my-search name="search"></my-search>
<my-login name="login"></my-login>
<my-logout name="logout"></my-logout>
<my-view404 name="view404"></my-view404>
</iron-pages>
있습니다
static get observers() {
return [
'_routePageChanged(routeData.page)',
];
}
_routePageChanged(page) {
this.loggedIn = MyApp._computeLogin();
if (this.loggedIn) {
this.page = page || 'search';
} else {
window.history.pushState({}, 'Login', '/login');
window.dispatchEvent(new CustomEvent('location-changed'));
sessionStorage.clear();
this.page = 'login';
}
}
이 내가 그것을 로그 아웃 아이콘을 클릭 때와 같이 잘 작동 my-logout
요소가 잘 붙어 있으며 ready()
또는 connectedCallback()
의 정보를 잘 처리합니다.
my-logout
브라우저를 새로 고침하고 DOM 새로 고침을 유발하지 않고, 당신이 다시 로그인하고 두 번째 시간을 로그 아웃 할 때, 문제는 오는
ready() {
super.ready();
this._performLogout();
}
있습니다. DOM이 지워지지 않았으므로 my-logout
이 여전히 첨부되어 있으므로 ready()
도 아니고 connectedCallback()
도 실행되지 않습니다.
나는이 문제를 해결하기위한 방법을 알아 냈지만, 매우 힘이 빠져 들었다. 내가 말했듯이
ready() {
super.ready();
this._performLogout();
document.addEventListener('iron-select', (event) => {
if (event.detail.item === this) {
this._performLogout();
}
});
}
를 작동,하지만 난 글로벌 이벤트 리스너를 가진 싫어하는 플러스 내가 전화를해야 : 기본적으로 아이콘을 선택하면, 나는 this._performLogout();
을 수행 할 요소에 이벤트 리스너를 추가 할 수 있습니다 요소가 처음으로 연결될 때 로그 아웃 기능 및 처음으로 요소가 연결될 때까지 청취자가 활성 상태가 아니기 때문에 나는 청취해야합니다.
'철분 선택기'에 두 링크를 모두 연결하고 로그인하면 어떻게됩니까? 두 개의 '철제 선택기'를 사용하는 것은 무엇입니까? – Ofisora
@Ofisora 너무 효과가 있습니다. 나는 그런 중복을 정리하지 않았다. 불행히도, 엘리먼트가 디스플레이 될 때마다 메소드를 최상으로 실행하는 방법에 대한 문제는 도움이되지 않습니다. – ModernDeveloperLLC