我有一个分配给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;