为什么$ rootScope绑定工作但在子控制器中调用$ parent不行?

时间:2015-02-03 14:58:26

标签: javascript angularjs scope

我已将应用分配到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",因为我已经为{{{}}分配了一个新控制器1}}按钮。为什么是这样?我想,因为logout按钮仍在logout mainCtrl内,我可以在标记中使用$scope来访问{{1} } {&#39; s $parent.authData但它不起作用。

有人可以为我澄清这个吗?

1 个答案:

答案 0 :(得分:1)

只需使用:

"authData"//is on the $rootScope

而不是:

"$parent.authData"

因为你有:

$rootScope.authData = authData;