我正在尝试使用过滤器来过滤掉一个字符串日期。我从API获得的日期是
"/Date(1418716652000+0000)/"
我有一个将日期转换为我想要的类型的函数:
1418716652000
功能是:
$scope.convertDate = function(published_first) {
var date = (published_first.match(/\(.*\)/, ''));
var convertedDate = date[0];
date = eval(convertedDate.replace(/\//g,''));
return date;
}
我的HTML是:
<div id ="news" ng-repeat="new in news | filter:convertDate">
<h3 class="title" ng-repeat="n in new">
<span>{{n.title}}</span><br/>
<div class="title-data">
<span ng-if="n.byline.length > 0">by: {{n.byline}}</span>
<br/>
<span>
<span>published: {{n.published_first | date:'medium'}}</span><br/>
</span>
</div>
我一直试图在ng-repeat div中将其作为我的HTML中的过滤器运行,但它不起作用。我也试过在相同的范围内运行过滤器,其中包括角度日期:&#39; medium&#39;过滤。这也不起作用。有人可以帮助我失踪吗?
答案 0 :(得分:2)
您正在使用的API似乎为您提供了具有 published_first 属性的新闻对象,该属性的传输格式要以不同方式呈现,但该数据在运行时不会在运行时更改接收。
将标记转换为任何类型的监视中的过滤器或函数意味着您不断地使用触发摘要的每个事件转换日期。最好从接收新闻项的控制器或服务运行convertDate()函数,并在从API接收每个项目时进行转换。在这种情况下,从String到Date的转换仅对每个新闻项进行一次,然后您的标记变为:
<span>published: {{n.published_first | date:'medium'}}</span>
此外,如果您可以放心,来自API的格式将始终保持一致(应该是这样),您可以通过以下方式转换为时间戳:
$scope.convertDate = function(published_first) {
return parseInt(published_first.substr(6), 10);
}
该行会删除 /日期()的初始非数字字符,并解析为第一个非数字字符 + 或)< / strong>取决于精度。
答案 1 :(得分:1)
1)创建一个过滤函数,如here所示。
module.filter('convertDate', function() {
return function(published_first) {
var date = (published_first.match(/\(.*\)/, ''));
var convertedDate = date[0];
date = eval(convertedDate.replace(/\//g,''));
return date;
};
})
2)使用过滤器格式化日期:
<div id ="news" ng-repeat="new in news">
<h3 class="title" ng-repeat="n in new">
<span>{{n.title}}</span><br/>
<div class="title-data">
<span ng-if="n.byline.length > 0">by: {{n.byline}}</span>
<br/>
<span>
<span>published: {{n.published_first | convertDate | date:'medium'}}</span><br/>
</span>
</div>
答案 2 :(得分:0)
尽可能避免使用过滤器。 Filters can cause huge performance issues in large applications.
那就是说,既然你把这个函数放在了作用域上,你可以在标记中使用它:
<span>published: {{convertDate(n.published_first) | date:'medium'}}</span><br/>