Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度名称不';t刷新_Javascript_Angularjs_Firebase - Fatal编程技术网

Javascript 角度名称不';t刷新

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

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) {
    $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;
  }
});