【问题标题】:Comparing two integers in AngularJS directive比较AngularJS指令中的两个整数
【发布时间】:2015-03-12 00:15:55
【问题描述】:

我想根据关联用户的graduation_year 有条件地显示或隐藏一个元素,而ng-showng-if 指令没有按原样工作。

如果graduation_year 大于或等于当前年份(即用户“活跃”),则应显示该元素,如果小于当前年份,则隐藏该元素。

在我尝试过的视图中

<div data-ng-repeat="user in data.group.users">    
  <div ng-show="{{ user.graduation_year }} >= {{ date | date:'yyyy' }}">Active</div>
</div>

在控制器中

$scope.date = new Date();

但无论如何它都将其视为错误,即使输出显示“2017 >= 2015”和“2014 >= 2015”(只是几个示例),所以我应该得到不同的结果。当我尝试ng-if 时,无论如何它们都被视为真实。

【问题讨论】:

    标签: javascript angularjs angularjs-directive ng-show angular-ng-if


    【解决方案1】:

    您错误地使用了变量插值。

    在 ng-show 中,您不需要 {{ 和 }}。

    此外,您正在组合比较操作和过滤器。 这确实有效,但让代码在视觉上尽可能简单可能会让您受益。

    试试这个:

    <div data-ng-repeat="user in data.group.users">    
      <div ng-show="isActive( user )">Active</div>
    </div>
    

    module.controller( 'UserCtrl', [ '$scope', function( $scope ){
        $scope.date = new Date()
        $scope.isActive = function( user ){      
            return user.graduation_year >= $scope.date.getFullYear()
        }
     }])
    }
    

    【讨论】:

    • 实际上,您可以将比较与过滤器返回的结果结合起来 - 您只需要适当的括号,就像其他答案所暗示的那样。所以,如果你另有暗示,这将是一个不正确的陈述
    • @NewDev 每天学习新知识,谢谢 :) 编辑以反映这些新知识
    【解决方案2】:

    花括号破坏了您的代码。

    <div data-ng-repeat="user in data.group.users">    
      <div ng-show="user.graduation_year >= (date | date:'yyyy')">Active</div>
    </div>
    

    【讨论】:

    • 你真的不需要大括号
    • 是的,你是对的。事实上,当有花括号时它不起作用。
    • 实际上,它确实有效:ng-show="{{user.graduation_year &gt;= (date | date:'yyyy')}}" - 只是不需要
    • 好的。它在我刚刚测试过的 plunkr 上不起作用。无论如何,有一个答案并且它有效,所以现在我要远离这个......:P
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多