我有一个分配给html标签的应用程序,如下所示:

<html lang="en" ng-app="pieShopApp">


路由为/pies并使用mainCtrl

when('/pies', {
    templateUrl: 'templates/pie-list.php',
    controller: 'mainCtrl'
}).


然后在mainCtrl中运行以下代码块,以检查Firebase中的身份验证更改:

Auth.$onAuth(function(authData) {
    //Doesn't work
    $scope.authData = authData;
    //Works
    $rootScope.authData = authData;
});


logout按钮分配另一个处理注销的控制器(此代码段假定正在使用$scope,而不是$rootScope

<div id="site-access-features">
    <a href="#/pies/register">
        <button id="register-btn" class="btn">Register</button>
    </a>
    <a href="#/pies/login">
    <button ng-hide="$parent.authData" <!-- doesn't work when using $scope --> id="login-btn" class="btn">Log in</button>
    </a>
    <a href="#/pies/login">
    <button ng-controller="logoutCtrl" ng-show="$parent.authData" <!-- doesn't work when using $scope -->id="logout-btn" class="btn" ng-click="logout()">Log out</button>
    </a>
</div>


现在,在mainCtrl中,我必须使用$rootScope才能访问authData中的ng-show="authData",因为我已为logout按钮分配了新的控制器。为什么是这样?我以为,由于logout按钮仍位于mainCtrl$scope内,因此我可以在标记中使用$parent.authData来访问mainCtrl$scope,但它不起作用。

有人可以帮我澄清一下吗?

最佳答案

只需使用:

"authData"//is on the $rootScope


代替:

"$parent.authData"


由于您拥有:

$rootScope.authData = authData;

09-30 19:27