一次绑定过滤器无法正常工作

时间:2016-02-02 20:07:47

标签: javascript angularjs angularjs-filter

当我尝试使用过滤器进行一次性绑定时,我收到了无效的日期错误:

<td>1w vol:</td>
<td>{{ :: edit_tag.termObject.vol }}</td>
<td>Added by:</td>
<td>{{ :: edit_tag.termObject.user }}</td>
<td>Timestamp:</td>
<td>{{ :: edit_tag.termObject.time | fromTimestamp:'MMM Do YYYY'}}</td>

enter image description here

以下工作当然,但是这个日期永远不会改变,所以我不需要使用双向绑定。有没有办法实现这个目标?

{{ edit_tag.termObject.time | fromTimestamp:'MMM Do YYYY'}}

我的过滤器是否有帮助:

.filter("fromTimestamp", function() {
    return function(timestamp, format) {
        return moment.unix(timestamp).format(format)
    }
});

2 个答案:

答案 0 :(得分:1)

这个问题确实引用了这个issue 'One-time binding doesn't work with filters'。在经过一番讨论之后,外卖是:

  

一次性绑定或不给定表达式需要稳定。您的   过滤器使得模型永远不会稳定因此错误。

因此,作为一种解决方法,您可以在控制器中使用带有momentjs的表达式来实现此目的:

app.controller('test', function($scope, moment){
  //somehow we obtain edit_tag.termObject.time
  var desiredFomat = 'MMM Do YYYY';
  $scope.formattedTime = moment.unix(edit_tag.termObject.time).format(desiredFomat);
})

然后在你的模板中:

<td>{{::formattedTime}}</td>

答案 1 :(得分:1)

尝试

<td>{{ :: (edit_tag.termObject.time | fromTimestamp:'MMM Do YYYY')}}</td>