我正在尝试让bootstraps导航栏根据来自angular控制器的数据显示和删除html元素。
我有以下的jade代码:
div.navbar.navbar-fixed-top
    div.navbar-inner
        div.container-fluid(data-ng-controller="NavCtrl")
            a.btn.btn-navbar(data-toggle='collapse', data-target='.nav-collapse')
                span.icon-bar
                span.icon-bar
                span.icon-bar
            div.nav-collapse.collapse
                ul.nav
                    li  
                        a(href='/topics') Topics
                    li(ng-show="curUser.admin")
                        a(href='/users') Users
                    li(ng-show="curUser.admin")
                        a(href='/organizations') Organizations
                    li(ng-show="curUser.admin")
                        a(href='/topicConfs') TopicConfig
                    li.divider
                ul.nav.pull-right
                    {{authenticated}}
                    li.dropdown(ng-show="authenticated")
                        a.dropdown-toggle(role='button', data-toggle='dropdown', href='#') {{curUser.email}}
                            b.caret
                        ul.dropdown-menu(role='menu')
                            li
                                a(href='/users/{{curUser._id}}') Profile
                            li.divider
                            li
                                a.btn(ng-click="logout()") Logout 
以及以下的控制器:
function NavCtrl($location, $scope, $rootScope, CurrentUser){
  $scope.curUser = CurrentUser.getUser()
  $scope.authenticated = CurrentUser.isAuthenticated()
  $rootScope.$on('$routeChangeStart', function(){
    $scope.curUser = CurrentUser.getUser()
    $scope.authenticated = CurrentUser.isAuthenticated()
  })
  $scope.logout = function(){
    CurrentUser.logout(function(result){
      $scope.curUser = CurrentUser.getUser()
      $scope.authenticated = CurrentUser.isAuthenticated()
      console.log("authenticated before logout is %j", $scope.authenticated)
      $location.url('/')
    })
  }
}
一切都正常显示,直到 $scope.authenticated 被设置为 false 并且 $scope.user 被设置为 {},在这种情况下,nav-bar中的任何ng-show属性都没有更新。
我需要做什么才能使bootstraps导航元素响应于$scope变量的变化?
 
 
$scope.$apply()来使Angular进入其digest loop。任何投影到当前视图上的属性都将有$watches,digest循环会对其进行评估。当其中一个$watch检测到更改时,视图会更新。 Angular之外的示例包括: - 浏览器事件回调。例如,element.bind('someEvent', function() {//需要在此处调用scope.$apply})- 第三方插件回调。例如,上面传递给logout的回调函数。 - 第三方AJAX回调。 - 第三方promise。