DOMに一度その要素が接続された後でも機能するログアウトページを作成しようとしています。これは、ログインしてからログアウトしてから再度ログインし、ログアウトを試みたときに発生します。Polymer 2 - 要素がiron-pages/iron-selectorを介して表示されるたびにアクションを実行します。
例えば、シェルは、私はまた、シェル内のページの変更のためのオブザーバーを持って
<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();
を実行します要素にイベントリスナーを追加することができます要素が最初に接続されたときのログアウト機能と要素が最初に接続されるまでリスナーがアクティブでないため、リッスンする必要があります。
ログアウトとログインの両方を 'iron-selector'に入れるとどうなりますか? 2つの「アイロンセレクター」を使用するポイントは何ですか? – Ofisora
@Ofisoraそれも動作します。私はちょうどそれのような重複をきれいにしていない。残念なことに、要素が表示されるたびにメソッドを最も効果的に呼び出す方法の問題は解決しません。 – ModernDeveloperLLC