我想过滤日期。应显示当前日期并隐藏未来日期。但每当我使用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/
我会感谢任何建议。
答案 0 :(得分:2)
<div ng-show="(checkDate==true)">
这意味着“嘿,Angular,如果div
”则显示此$scope.checkDate === true
好像您想要调用checkDate()
项目的$scope.dates
方法
要执行此操作,请使用<div ng-show="d.checkDate()">
但是您的checkDate()
将$scope.thisDate
与new Date()
进行了比较,但thisDate
中没有$scope
变量,因此结果为false
, angular ng-show
指令将隐藏所有div
答案 1 :(得分:1)
你有两个问题。
checkDate
在功能方面不正确。您不会在上一个else
语句中返回任何值。
您应该写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);
希望这有帮助。