Firebase响应后Angular.js页面未更新

时间:2016-10-18 21:53:29

标签: javascript angularjs firebase firebase-authentication

myApp.controller('RegistrationController', ['$scope',
  function($scope) {
    var auth = firebase.database().ref();
    //  console.log("auth::"+auth);

    $scope.login = function() {
      $scope.message = "Welcome " + $scope.user.email;
    }; //login


    $scope.register = function() {    
      console.log($scope.user.email);
      console.log($scope.user.password);
      console.log("jdxnx::" + auth);
      firebase.auth().createUserWithEmailAndPassword($scope.user.email, $scope.user.password).then(function() {
        $scope.message = "Hi" + $scope.user.email + " you have registered"
      }).catch(function(error) {
        $scope.message = error.message;
        console.log($scope.message);
      }); // //createUser
    }; // register
  }
]); // Controller

在上面的代码中,我单击提交我的注册函数运行,然后在firebase.auth().createUserWithEmailAndPassword内部运行但在我从firebase.auth().createUserWithEmailAndPassword($scope.user.email,$scope.user.password)函数得到响应之前,我的事件从寄存器函数出来然后返回因为html页面中的{{message}}值保持空白而页面,但在后端firebase.auth().createUserWithEmailAndPassword($scope.user.email,$scope.user.password)函数进程中获取响应,但事件在进程完成之前返回到页面。我希望该函数事件应该等到我得到响应。

请注意,我使用的是firebase 3.x.x。

1 个答案:

答案 0 :(得分:2)

firebase.auth().createUserWithEmailAndPassword是一个异步函数,不属于Angular.js。因此,Angular.js无法识别其回调到$scope所做的修改,并且它不会更新页面。在回调完成后尝试添加$scope.apply()

firebase.auth().createUserWithEmailAndPassword($scope.user.email, $scope.user.password).then(function() {
    $scope.message = "Hi" + $scope.user.email + " you have registered"
    $scope.apply();
  }).catch(function(error) {
    $scope.message = error.message;
    console.log($scope.message);
    $scope.apply();
  });

您可能感兴趣的其他内容:

  • 查看AngularFire项目,它会在Firebase操作后触发Angular.js。
  • 不建议您使用Angular.js,使用独立控制器和$scope,并且已经有一段时间了。您可能想要查看Controller-As语法(Angular.js 1.3+)或更好的组件(Angular.js 1.5 +)。