Angularjs$broadcast-未捕获类型错误:无法读取属性'$$下一步行动';空的

Angularjs$broadcast-未捕获类型错误:无法读取属性'$$下一步行动';空的,angularjs,Angularjs,我有一个与Firebase通信的服务,对于其中的登录部分,我在广播成功登录事件后收到此错误,因此我的服务基本上如下所示: angular.module('TestFire').factory('fireService', function ($rootScope, firebasePath, firebasePathToUsers, firebasePathToNicks) { var fireRef = new Firebase(firebasePath); var s = {};

我有一个与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

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

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

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

当然,从您的
$on(“UserLogged”)
处理程序中删除
$scope
手动处理。

我最终使用了angularFire身份验证,因为我正在制作一个应用程序的原型,时间不多了,但是,是的,我测试了您的建议,并且成功了。谢谢,你好,尼科斯。这是一个很好的答案,它解决了我的问题,并使我免受很多的头部撞击。但是我仍然想知道它使用$rootscope的原因是什么。
$rootscope
不是重点,重点是在处理外部触发的事件时使用
$apply
。之所以使用
$rootScope
,是因为它是一项服务,并且这是唯一可用的作用域。