我在这里要做的是在启动时实现一项功能。我希望我的用户的firebase身份验证电子邮件变量设置一个变量来表示登录到我的应用程序的当前用户?
使用以下代码设置用户变量的行在我单击登录后工作但不在页面加载时工作!控制台日志在启动时完美运行,但没有将用户设置为电子邮件...
crossfitApp.controller('globalIdCtrl', ["$scope", 'defautProfileData',
function ($scope, defautProfileData) {
var dataRef = new Firebase("https://glowing-fire-5401.firebaseIO.com");
//defautProfileData.country;
$scope.authenticated = {
currentUser: 10007,
emailAddress: "",
settings: "",
};
$scope.auth = new FirebaseSimpleLogin(dataRef, function (error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
//Not working
$scope.authenticated.currentUser = user.id;
console.log('User ID: ' + user.id + ', ProvideFr: ' + user.provider + user);
console.log(user);
} else {
console.log($scope.auth);
alert('deuces');
//!Trigger not logged in
}
});
}
]); //GlobaldCtrl
答案 0 :(得分:0)
在Angular的HTML compiler范围内不调用FirebaseSimpleLogin的回调。通常,无论何时调用ng-click,ng-submit等,Angular都会触发$ scope。$ apply(),它会检查绑定的JavaScript变量的任何更改并将其应用于DOM元素。
当Angular之外的事件更改变量时,您需要通过手动触发$ apply事件来让Angular知道。最安全的方法是使用$ timeout:
angular.controller('MyCtrl', function($scope, $timeout) {
$scope.auth = new FirebaseSimpleLogin(dataRef, function (error, user) {
if (error) {
// an error occurred while attempting login
console.log(error);
} else if (user) {
$timeout(function() {
$scope.currentUser = user.uid;
});
} else {
console.log('not logged in');
}
});
通常,首选user.uid为user.id,因为它在提供商中是唯一的。
像AngularFire这样的库可以为您省去很多麻烦,因为它抽象了很多集成Firebase和Angular的复杂性。