Javascript 角度名称不';t刷新
Auth Ctrl:Javascript 角度名称不';t刷新,javascript,angularjs,firebase,Javascript,Angularjs,Firebase,Auth Ctrl: .controller('AuthCtrl', function(Users, Auth, $state) { var authCtrl = this; authCtrl.user = { name: '', email: '', password: '' }; authCtrl.login = function() { Auth.$authWithPassword(authCtrl.user).then(function(auth) { $st
.controller('AuthCtrl', function(Users, Auth, $state) {
var authCtrl = this;
authCtrl.user = {
name: '',
email: '',
password: ''
};
authCtrl.login = function() {
Auth.$authWithPassword(authCtrl.user).then(function(auth) {
$state.go('home');
console.log('Logged in');
}, function(error) {
authCtrl.error = error;
});
};
authCtrl.register = function() {
Auth.$createUser(authCtrl.user).then(function(user) {
Auth.$authWithPassword(authCtrl.user).then(function(authData) {
Users.saveUser({
uid: authData.uid,
name: authCtrl.user.name,
mail: authData.password.email
});
console.log('Registered');
$state.go('home');
});
}, function(error) {
authCtrl.error = error;
});
};
});
路由器:
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('login', {
url: '/login',
controller: 'AuthCtrl as authCtrl',
templateUrl: 'auth/login.html'
})
.state('register', {
url: '/register',
controller: 'AuthCtrl as authCtrl',
templateUrl: 'auth/register.html'
})
导致问题的HTML:
<li ng-show="homeCtrl.isLoggedIn()" ng-class="{active: homeCtrl.isSelected(5)}">
<a href ng-click="homeCtrl.selectTab(5, 'profile')">{{ homeCtrl.getUserName(homeCtrl.currentUser.uid) }}</a>
</li>
您好,我正在使用Firebase+Angular创建我自己的应用程序。
问题如下:当我注册(或登录)时,我的用户名不会在页面上自动刷新,我必须手动重新加载它。我想这是关于解决注册和登录状态的承诺,但我不知道要添加什么。谁能帮我一下吗,我只是卡住了
另一件事——用户名的出现需要几秒钟,它不会立即出现。我猜这是关于在表达式中调用函数,但我不知道如何重构它
任何帮助都将不胜感激 我在创建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);
此解决方案帮助我不必重新加载应用程序来查看菜单更改,并且在成功登录后可以轻松地用用户名更新菜单。在
homeCtrl
中添加此状态检查可修复此问题
Auth.$onAuth(function(authData) {
if (authData) {
homeCtrl.currentUser = authData;
}
});
检索用户数据后,是否可以添加
$scope.$digest()
或$scope.$applyAsync()
?闻起来好像$digest cycle没有运行,因为angular没有意识到更改,即angular之外的更改。你的意思是什么?谢谢你的回答,尽管我使用Firebase找到了一种不同的方法:
Auth.$onAuth(function(authData) {
if (authData) {
homeCtrl.currentUser = authData;
}
});