javascript - 当我调用它时,angular 的 $rootScope.$on() 方法没有被触发。为什么?

标签 javascript angularjs angularjs-scope firebase angularfire

我正在尝试使用 Angularjs 简化登录功能。我已经分离了 Controller 并制作了一个服务,该服务使用 Firebase 服务器对用户进行身份验证。我应该提到的另一件事是我正在使用他们的 API,称为 Angular Fire。问题是我正在尝试触发 $rootScope.$on 函数。这是代码:

myApp.controller('StatusController', function($scope, $rootScope, $firebase, $firebaseAuth) {

    console.log($rootScope);

    $rootScope.$on('$firebaseAuth:authWithPassword', function(e, authUser){
        console.log("printsomething");
        $scope.userEmail = authUser.userEmail;
    }); //$firebaseAuth:login
});//StatusController

这是身份验证服务:

myApp.factory('Authentication', function ($firebase, $firebaseAuth, FIREBASE_URL, $location) {

    var ref = new Firebase(FIREBASE_URL);
    console.log(FIREBASE_URL);
    var simpleLogin = $firebaseAuth(ref);

    var myObject = {
        login: function (user) {
            return **simpleLogin.$authWithPassword**({
                email: user.email,
                password: user.password
            });
        } //login
    } //myObject
    return myObject;
})

这是调用身份验证的地方。在我的注册 Controller 中:

myApp.controller('RegistrationController', function($scope, $firebaseAuth, $location, Authentication) {


$scope.login = function() {
    Authentication.login($scope.user)
    .then(function(user) {
        $location.path('/meetings');
    }, function(error) {
        $scope.message = error.toString();
    });
}//login
$scope.register = function() {
    $location.path('/register');
}//register
});//

我什至记录了根作用域以查看 $on() 函数中是否有正确的参数:

$$listeners: Object$firebaseAuth:authWithPassword: Array[1]0: function (e, authUser){length: 1
__proto__: Array[0]

如果有人能提供帮助,我将不胜感激。

最佳答案

Angular Fire 不会在范围内广播事件。您将需要在 promise 完成回调中执行此操作。我建议在您的身份验证服务中这样做。

myApp.factory('Authentication', function ($rootScope, $firebase, $firebaseAuth, FIREBASE_URL, $location) {

  var ref = new Firebase(FIREBASE_URL);
  console.log(FIREBASE_URL);
  var simpleLogin = $firebaseAuth(ref);

  var myObject = {
      login: function (user) {
          return simpleLogin.$authWithPassword({
              email: user.email,
              password: user.password
          }).then(function(authData){
              $rootScope.$broadcast('$firebaseAuth:authWithPassword',authData);
              return authData;
          });
      } //login
  } //myObject
  return myObject;
})

您在处理程序的末尾返回 authData,因此您可以将其他操作链接到同一个 promise (就像您在 RegistrationController 中所做的那样)。

关于javascript - 当我调用它时,angular 的 $rootScope.$on() 方法没有被触发。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051669/

相关文章:

javascript - AngularJS $scope 和 Controller 作为语法真的没有区别吗?

javascript - AngularJS 表中无法识别 $scope 方法

javascript - 单击标记时谷歌地图消失

javascript - 如何限制复选框在某些条件后进行选择

ios - Ionic 应用程序覆盖 iOS 9.1 中的 iPhone 状态栏

javascript - Angular Bootstrap Tabs,href 不起作用

javascript - 为什么这个 Angular 值没有更新?

javascript - 无法显示 Canvas 对象

javascript - callMe 函数在 JavaScript 中的工作原理

javascript - 如何在ng grid中以编程方式取消选择angularjs中的一行