$ location.path( '/内容');无论我做什么,都不起作用。为什么?

时间:2013-12-30 04:36:39

标签: angularjs angularjs-scope firebase angularfire

这是一个跟进问题:When clicking on login with facebook/persona button with angularFire v0.5.0 ($firebaseAuth) user gets redirected immediately to '/'.Why?

我遇到了另一个问题,因为现在这不起作用了:

$rootScope.$on('$firebaseAuth:login', function(){
                    $location.path('/content');

因为在用户完成身份验证后,他们应该被重定向到/ content(而不是被卡在登录页面,登录按钮由于ng-hide而消失(见上文)),但是我尝试$ location并不重要。路径('/ content')不起作用。

我试过了:

waitForAuth.then(function(){
                  console.log('test');
                  $location.path('/content');
              })

但是在用户通过身份验证之前,console.log会以控制台的方式打印出“test”,因此waitForAuth似乎无法正常工作:/。不知何故,waitForAuth会触发console.log,但它并没有触发$ location.path ...奇怪。

我甚至尝试过这样做(使用waitForAuth和$ rootScope。$ on:

waitForAuth.then(function(){
                      console.log('test');
                      $location.path('/content');
                      $scope.$apply();
                  })

但是我得到一个错误,即角度$ digest已经在进行中。

但是,如果我这样做:

app.controller('controller',['$scope','$firebaseAuth','$location','$rootScope',function($scope, $firebaseAuth,$location,$rootScope) {

            $scope.$on('$locationChangeStart', function(event) {
                event.preventDefault();
              });


            var ref = new Firebase('https://mybase.firebaseio.com/');
            $scope.auth = $firebaseAuth(ref);
            $rootScope.$on('$firebaseAuth:login', function(){
                console.log("root scope");
                $scope.$apply(function(){
                    console.log("scope");
                    $location.path('/content');
                });

            });

        }]);

控制台两次注销“根范围”和“范围”并且时间是完美的:仅在用户完成身份验证后,但$ location.path()仍然无法正常工作且用户被卡在登录页面/视图中。

这也不起作用:

$rootScope.$on('$firebaseAuth:login', function(){
                    console.log("root scope");
                    $scope.$apply(function(){
                        console.log("scope");
                        $location.path('/content');
                        $location.replace();

                    });

我需要一些帮助:)

1 个答案:

答案 0 :(得分:0)

我已从

中移除authRequired: true解决了我的问题
$routeProvider.when('/content',{
            authRequired: true, [removed]
            templateUrl: 'content.html',
            controller: 'MyController'
        });

并像这样更改控制器:

app.controller('controller',['$scope','$firebaseAuth','$location','$rootScope',function($scope, $firebaseAuth,$location,$rootScope) {



                $scope.$on('$locationChangeStart', function(event,next,current) {
                if (next == 'http://angular.ngrok.com/angularfire/'){event.preventDefault();}
            });

            var ref = new Firebase('https://mybase.firebaseio.com/');
            $scope.auth = $firebaseAuth(ref);
            $rootScope.$on('$firebaseAuth:login',function(){
                $location.path('/content');
            });

        }]);

的变化:

event.preventDefault();必须具体,否则会阻止所有$location.path();

waitForAuth无法正常工作,因为它并不真正等待Auth,它会立即触发,因此我必须使用$rootScope.$on


我还在angularFire Github上打开了一个问题:

https://github.com/firebase/angularFire/issues/197

现在我必须找到另一种防止未经授权访问的方法:(