Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于在登录后隐藏元素的重新计算指令_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 用于在登录后隐藏元素的重新计算指令

Javascript 用于在登录后隐藏元素的重新计算指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,大家好 在这种情况下,我希望根据会话是否处于活动状态来显示一些UI元素 我采取的方法是使用指令。但是,当用户成功登录时,指令不会被计算出来 以前我是这样使用的: <ul class="nav navbar-nav navbar-right" ng-hide="vm.model.currentUser.id !== 0"> 为了更好地重构,我将检查逻辑移到了指令级,并将其称为: <ul class="nav navbar-nav navbar-right" !ap-va

大家好

在这种情况下,我希望根据会话是否处于活动状态来显示一些UI元素

我采取的方法是使用指令。但是,当用户成功登录时,指令不会被计算出来

以前我是这样使用的:

 <ul class="nav navbar-nav navbar-right" ng-hide="vm.model.currentUser.id !== 0">
为了更好地重构,我将检查逻辑移到了指令级,并将其称为:

 <ul class="nav navbar-nav navbar-right" !ap-valid-login-session>
两个问题:

  • 这种方法是正确的还是有其他更好的方法
  • 如果这种方法是正确的,那么如何确保重新计算该指令

    • 您不能使用
      在html中。因此,第二个代码段将不起作用。但是,如果您删除了
      并将所有逻辑移到指令中,在该指令中添加和删除元素上的
      隐藏类,这可能会起作用

      然而,我使用的编码风格试图避免在指令内部操纵html属性和css类。这是将表示层与业务逻辑层混合在一起,而且关注点分离不好

      取而代之的是,我将使用第一个代码片段进行一点小改动。我会将角度表达式提取到如下方法调用中:

      <ul class="nav navbar-nav navbar-right" ng-hide="isValidUser()">
      
      这里的好处是:

    • 更具语义意义的html
    • 与表示分离的业务逻辑
    • 更容易为用户编写单元测试

    • 我同意……第一种方法更正确,但在某种方法上更好。!是我代码片段中的拼写错误。当整个页面由ng编译时,它只工作一次。因此,我的问题仍然是,一旦我登录,如何再次计算指令。不管怎样,我认为指令是用来操作html的,所以如果我可以分开,那么肯定是A+。现在当你在指令中说。。。您是否使用指令的范围,如果是这样,那么ng hide属于angular,那么为什么我必须定义指令。如果你接着谈论控制器作用域,那么如果我想为不同的控制器定义isValidUser,我会感到惊讶。是的,我的意思是函数需要在
        元素的作用域中。在这种情况下,它将是一个控制器。如果
        isValidUser
        足够复杂,并且跨多个作用域共享,那么您将希望将其提取到自己的服务中。每个使用它的控制器将使用DI注入它,然后将函数添加到其作用域中。
        scope.isValidUser = function() { return vm.model.currentUser.id !== 0; }