Angularjs $ broadcast - 未捕获TypeError:无法读取null的属性'$$ nextSibling'

时间:2013-10-03 10:33:47

标签: angularjs

我有一个与Firebase通信的服务,对于它的登录部分,我在广播成功登录事件后收到此错误,所以基本上我的服务看起来像这样:

angular.module('TestFire').factory('fireService', function ($rootScope, firebasePath, firebasePathToUsers, firebasePathToNicks) {

var fireRef = new Firebase(firebasePath);

    var s = {};
    s.logged = false;

    s.auth = new FirebaseSimpleLogin(fireRef, function(error, user) {
        if (user) {
            s.logged = true;
            $rootScope.$broadcast('UserLogged', user);

        } else {
            // user is logged out
            console.log('User is not logged');

        }
   return s;
}

在我的登录控制器中,我想在事件被触发时重定向到主页面:

angular.module('TestFire').controller('loginUserController', function($location, $scope, fireService){

    $scope.facebookLogin = function (){
         fireService.loginUserWithFacebook();
    };

    $scope.$on('UserLogged', function(event, user) {
        $location.url('/');
        if (!$scope.$$phase){
            $scope.$apply();

        }
    });
});

如果我不使用$apply,则$location将不会重定向,如果我使用它,则会收到错误

Uncaught TypeError: Cannot read property '$$nextSibling' of null angular.min.js:94
$get.e.$broadcast

虽然我稍后在页面上重定向但没有响应进一步的操作,但我认为这是由上一个错误引起的。

1 个答案:

答案 0 :(得分:1)

我建议在主监听器中尝试使用$apply

s.auth = new FirebaseSimpleLogin(fireRef, function(error, user) {
    $rootScope.$apply(function() {
        // original code here
    });
});

当然,请从$scope处理程序中删除$on("UserLogged")手动处理。