2016-04-01 12 views
1

認証Ctrlキーを更新していません:角度名は

homeCtrl.getUserName = Users.getUserName; 

getUserName: function(uid) { 
    if (users.$getRecord(uid)) { 
     return users.$getRecord(uid).name; 
    } 
    }, 

こんにちは、Firebase + Angularを使用して自分のアプリを作成しています。 問題は次のとおりです。サインアップ(またはサインイン)しているときに、自分のユーザー名がページ上で自動的にリフレッシュされないため、手動でリロードする必要があります。私はそれがレジスタとログイン状態の約束を解決しようとしていると思いますが、何を追加すればいいのか分かりません。誰もがこれで私を助けてください、私はちょうど立ち往生しています。

もう1つ - ユーザー名の表示に数秒かかりますが、すぐには発生しません。それは表現の中で関数を呼び出すことですが、私はそれをどのようにリファクタリングするのか分かりません。

ご協力いただければ幸いです!

+0

ユーザデータを取得した後に '$ scope。$ digest()'や '$ scope。$ applyAsync()'を追加できますか?それは角度が変化を意識していない、つまり角度外で行われた変更を認識していないため、$ digest cycleが実行されないような臭いがあります – maurycy

+0

どこを意味しますか? –

答えて

2

Angular + Firebaseアプリケーションの作成時に同様の問題が発生しました。

//In auth service 
$rootScope.$broadcast('auth-userLoginChange'); 

と私は、ユーザーの名前を表示したり、「サインイン」私のメニューのカスタムディレクティブを(書いた:私は実装してしまった解決策は、私は私の認証サービスが正常に認証されたユーザの後に認証ログインの変更を放送していたました)認証状態に応じて認証ログインの変更のために聞いているし、それに応じてメニューを更新:

//In menu directive 
//Listen to login/logout changes, update menu. 
scope.$on('auth-userLoginChange', scope.setLoginMenu); 

このソリューションは、私は、メニューの変更を確認するには、アプリケーションを再ロードする必要はありませ助け、簡単に自分のメニューを更新することができることログインに成功したユーザーの名前

+0

答えてくれてありがとう、私はFirebaseを使って別の方法を考え出した: –

1

この状態チェックを追加すると、homeCtrlにこの問題が修正されます。

Auth.$onAuth(function(authData) { 
    if (authData) { 
    homeCtrl.currentUser = authData; 
    } 
});