1

也许使用2路绑定$watch对我来说仍然不是很清楚..但我期待这段代码应该可以工作!

我的index.html页面中有一个topNavbar指令。如果用户未登录,topNavbar 应该显示 loginButton,否则如果已经登录,则显示loginButton 。

所以我ng-switchtopNavbar中有一个,查看CurrentUserService的isLogged属性。我想这有点像。$watch(CurrentUserService.isLogged)

但是,当我更改CurrentUserService.isLogged为时trueng-switch不会立即更新。它会在我的任何操作后更新,例如单击按钮或更改视图。为什么它没有按我的预期工作?

这是我的代码:

索引.html

<html lang="it" xmlns:ng="http://angularjs.org" ng-app="epoiApp">
  ...
  <body style="overflow-y: auto;">
    ...
    <top-navbar></top-navbar>
    ...
  </body>
</html>

指令模板 topNavbar

<div ng-switch on="navbarCtrl.isLogged()">
  <div ng-switch-when="false">
    <login-button></login-button>
  </div>
  <div ng-switch-when="true">
    <loggedin-button></loggedin-button>
  </div>                                            
</div>

控制器导航栏Ctrl

controller:function(CurrentUserService)
            {
             this.isLogged = function()
                            {return CurrentUserService.isLogged();} 
            }

当前用户服务

.service('CurrentUserService', function () 
  {   
   // initialization
   _islogged = false;

   this.isLogged = function() 
        { return _islogged; };

  }  

谢谢你

4

1 回答 1

2

这是一个笨蛋

当模型发生变化时,Angular 会启动一个摘要循环(这就是为什么在你以某种方式与 UI 交互后你注意到它更新的原因)。

$scope.$apply()服务内的闭包变量的更改不是模型的一部分,因此当您知道此变量已更新时 ,您需要手动启动摘要循环。

于 2015-06-18T14:14:27.467 回答