嘿伙计们,所以我使用firebase和angular来构建一个示例应用程序。
这是注册功能
$scope.register = function (){
Authentication.register($scope.user)
.then(function(user){
Authentication.login($scope.user);
})
.then(function(user){
$timeout(function(){
$location.path('/meetings');
}, 5);
})
.catch(function(error){
$scope.message = error.toString();
});
} //register
此函数调用此工厂中的方法
myApp.factory('Authentication', function($firebase,
$firebaseAuth,$location, FIREBASE_URL){
var ref = new Firebase (FIREBASE_URL);
var auth = $firebaseAuth(ref);
var myObject = {
login : function (user){
return auth.$authWithPassword({
email: user.email,
password: user.password
});
}, // login
logout: function (){
return auth.$unauth();
},
register : function (user){
return auth.$createUser(user.email,user.password);
} //register
} //myObject
return myObject;
});
这里是status.js控制器,它根据用户是否登录来更改我的索引
auth.$onAuth(function(authData){
if (authData){
console.log("i entered authData");
$scope.userStatus = authData.password.email;
} else {
$scope.userStatus = false;
}
});
index.html文件的一部分
<div class="userinfo"
ng-controller="StatusController" ng-show="userStatus">
<span class="user">Hi {{userStatus}}</span>
<a href="#" ng-click="logout()">Log Out</a>
</div>
我的问题是ng-view需要页面刷新才能显示新值。它没有自动显示,但我的代码工作。如果我手动刷新页面,我可以看到用户已注册并登录。
现在搜索大约2个小时和$ scope。$ apply似乎就是这种情况。
提前谢谢
答案 0 :(得分:0)
我想感谢你们可能的解决方案,但似乎解决方案在于$ timeout变量。
由于下面的注册功能与API进行对话,并且我使用GulpJS在本地环境中工作,因此我的脚本与Firebase API之间的讨论会有延迟。
$scope.register = function (){
Authentication.register($scope.user)
.then(function(user){
Authentication.login($scope.user);
})
.then(function(user){
$timeout(function(){
$location.path('/meetings');
}, 5);
})
.catch(function(error){
$scope.message = error.toString();
});
} //register
这就是为什么我首先在那里放置一个$ timeout角度函数但是我忘了$ timeout函数输入中的数字5是以毫秒为单位,这似乎是因为我的设置(在谈话时使用本地环境) Firebase API在线)我发现如果我在重定向中使用2秒延迟,现在ng-show会自动更改,而无需手动刷新页面。
正确的代码如下:
$scope.register = function (){
Authentication.register($scope.user)
.then(function(user){
Authentication.login($scope.user);
})
.then(function(user){
$timeout(function(){
$location.path('/meetings');
}, 2000);
})
.catch(function(error){
$scope.message = error.toString();
});
} //register
我怀疑如果我在网络上使用我的角度应用程序,我可能会降低延迟甚至完全删除$ timeout功能。