角度ng-show不显示数据

时间:2014-10-04 16:55:23

标签: javascript angularjs ng-show

我想过滤日期。应显示当前日期并隐藏未来日期。但每当我使用ng-show时,一切都会被关闭。看看你自己 - 这里是小提琴

 <div ng-controller="date">
    <div ng-repeat="d in dates">
        <ul>
            <div ng-show="(checkDate==true)"><li>{{d.thisDate() | date:"mediumDate"}}</li></div>
        </ul>
    </div>
</div>

http://jsfiddle.net/adeling/Tb9j5/22/

我会感谢任何建议。

3 个答案:

答案 0 :(得分:2)

<div ng-show="(checkDate==true)">

这意味着“嘿,Angular,如果div”则显示此$scope.checkDate === true

好像您想要调用checkDate()项目的$scope.dates方法

要执行此操作,请使用<div ng-show="d.checkDate()">

但是您的checkDate()$scope.thisDatenew Date()进行了比较,但thisDate中没有$scope变量,因此结果为false, angular ng-show指令将隐藏所有div

答案 1 :(得分:1)

你有两个问题。

  1. checkDate在功能方面不正确。您不会在上一个else语句中返回任何值。

  2. 您应该写ng-show="(checkDate==true)"而不是ng-show="d.checkDate()"

答案 2 :(得分:1)

有一些问题。

- 你应该使用ng-show =&#34; d.checkDate()&#34;。

<div ng-app="milo">
<div ng-controller="date">
  <div ng-repeat="d in dates">
    <ul>
      <div ng-show="d.checkDate()">
        <li>{{d.thisDate() | date:"mediumDate"}}
        </li>
      </div>
   </ul>
  </div>
</div>

- 您无法比较两个新日期并期望它们相等。例如,如果您尝试这样做,它将返回false。

alert(new Date() == new Date());

- 您无法从每个元素的范围引用您的函数thisDate。这是未定义的。您应该像函数一样访问它,否则您将获得函数本身,而不是函数的结果。所以你的代码可以重构成这样的东西。

var milo = angular.module('milo',[]);

alert(new Date() == new Date());

function date($scope){

    $scope.dates = [
    {
        id: 0,
        thisDate: function(){
            return new Date();
        },
        checkDate: function(){
            if(this.thisDate()>new Date()){
                return false;
            }
            else {
                return true;
            }
        }
    },
    {
        id: 1,
        thisDate: function(){
            return  new Date();
        },
        checkDate: function(){
            if(this.thisDate()>new Date()){
                return false;
            }
            else {
                return true;
            }
        }
    },
    {
        id: 2,
        thisDate: function(){
            return 141232741945463;
        },
        checkDate: function(){
            if(this.thisDate()>new Date()){
                return false;
            }
            else {
                return true;
            }
        }
    }
    ];
};

milo.controller('date', date);

希望这有帮助。