在AngularJS应用程序中,如何防止在用户获得授权之前触发服务

在AngularJS应用程序中,如何防止在用户获得授权之前触发服务,angularjs,Angularjs,我有一个服务被调用以获取授权用户的位置列表。此信息用于填充选择列表,他们可以切换位置以查看不同的信息 选择列表的代码在index.html的导航栏中,但我不希望在用户成功通过身份验证且应用程序切换到主视图之前在页面上启动服务 我使用ng show隐藏导航栏,其中包含AuthCtrl的isAuthorized()函数。但是,无论用户是否登录,来自LocationCtrl以填充ng repeat的服务调用始终激发。我可以将导航组件移动到主视图中,但是我需要在所有受保护的视图中使用它。在单页应用程序中

我有一个服务被调用以获取授权用户的位置列表。此信息用于填充选择列表,他们可以切换位置以查看不同的信息

选择列表的代码在index.html的导航栏中,但我不希望在用户成功通过身份验证且应用程序切换到主视图之前在页面上启动服务

我使用ng show隐藏导航栏,其中包含AuthCtrl的isAuthorized()函数。但是,无论用户是否登录,来自LocationCtrl以填充ng repeat的服务调用始终激发。我可以将导航组件移动到主视图中,但是我需要在所有受保护的视图中使用它。在单页应用程序中填充基于服务的菜单项的最佳方法是什么

index.html

<!doctype html>
<html lang="en" ng-app="betterbooks">
<head>
  scripts...
</head>

<body>
  <nav class="navbar-fixed-top" ng-controller="AuthCtrl as auth">
    <div class="container" ng-show="auth.isAuthorized()">
      <ul class="navbar-right">
        <li><a href="#/home/">Home</a></li>
        <li class="dropdown">
          <a href="#" onclick="return false;" class="dropdown-toggle" data-toggle="dropdown">Accounts <span class="caret"></span></a>

          <ul class="dropdown-menu" ng-controller="LocationCtrl">
            <li ng-repeat="location in locations">
              <a href="#/location/{{ location.id }}/">
                 {{ location.name }} 
              </a>
            </li>
          </ul>

        </li>
        <li><button ng-click="auth.logout()">Logout</button></li>
      </ul>
    </div>
  </nav>
  <div class="view-container" style="height:100%">
    <div ui-view class="view-frame"></div>
  </div>
</body>
</html>

脚本。。。
  • 注销

如果,则使用
ng。导航栏在
auth.isAuthorized()
为true之前不会加载到dom中,因此
LocationCtrl
在该点之前不会呈现或运行