2017-05-22 15 views
2

私はfirebaseでログインするアプリを持っています。私はこのためにpolymerfireを使用しています。 my-appこれらの子供を持っています:statusKnownポリマー - 親から要素を取得

<firebase-app 
    auth-domain="my-app-ID.firebaseapp.com" 
    database-url="https://my-app-ID.firebaseio.com" 
    api-key="my-app-apikey"> 
</firebase-app> 
<firebase-auth 
    id="auth" 
    user="{{user}}" 
    status-known="{{statusKnown}}" 
    provider="google" 
    on-error="handleError"> 
</firebase-auth> 

<iron-pages selected="{{page}}" attr-for-selected="name"> 
    <my-loading name="loading"></my-loading> 
    <my-home name="home"></my-home> 
    <my-dashboard name="dashboard"></my-dashboard> 
</iron-pages> 

page変更とfirebase-auth要素のuser財産メインapp要素を手に入れました。 statusKnownfalseですが、loadingページが表示されます。 statusKnowntrueの場合、usernullの場合はhome、ユーザーがdashboardの場合はどちらかを選択します。

_signInChanged(statusKnown) { 
     if(this.statusKnown) { 
      if(this.user) { 
       this.page = "dashboard" 
      } else { 
       this.page = "home" 
      } 
     } else { 
      this.page = "loading" 
     } 
    } 

home画面にはサインインするボタンがあり、それはfirebase-auth機能signInWithPopup()を呼び出す必要がありますクリックします。しかしfirebase-auth要素には、my-home要素からはアクセスできません。 document.getElementByIDで見つからないか、属性として渡されました。または、何らかの理由で親ポインタでアクセスする場合this.parentElement.$.auth.signInWithPopup()

子供からauth要素を取得するにはどうすればよいですか?

答えて

2

これは別の方法で行うことができます。イベントとリスナーのおかげで、あなたは親にいくつかのイベントを伝播させ、次に親要素でthis.$.authを使ってfirebase-authにアクセスすることができます。だから、

:あなたはfirebase認証を呼び出す準備ができているmy-home要素で

、同じようsomethind呼び出し:this.fire("logIn");と親-elemet ready関数write内でこの:

this.addEventListener("logIn", function() { 
    this.$.auth.signInWithPopup(); 
}.bind(this)); 

、それはそれです。

+1

ありがとう、イベントは答え:)と私はすでにそれを解決しました:)しかし、私はポリマー2.0を使用しています。 2.0では、 'this.dispatchEvent(new CustomEvent( 'login'、{bubbles:true、configured:true})')のようにdispatchEventを呼び出してイベントを呼び出すと、 ' 'となります。 – microo8

+1

stackoverflowに 'Polymer 2.x'というタグがありますので、皆さんが使用しているバージョンが誰にでも分かるように、それを使用することは素晴らしい方法です。だから将来、それを使用しようとします。とにかく私はあなたにアイデアをもたらすのを助けてうれしいです –

関連する問題