我创建了一个自定义过滤器,这是测试它的测试视图:

<div>{{ 1400956671914 | userDate }}</div>
<div>{{ 1288323623006 | userDate }}</div>


这基于角度过滤器,并根据用户自己的偏好设置用户日期格式:

app.filter('userDate', function ($filter, userModel) {

  var userDate = userModel.getPreferences().dateFormat;
  // userDate = 'yyyy-mm-dd'

  function userDateFilter (date) {
    return $filter('date')(date, userDate);
  };

  return userDateFilter;

});


结果如下:

2014-05-24
2010-10-28


我有一个视图,可以在其中更新模型userModel并将dateFormat设置为“ dd / mm / yyyy”,然后返回测试视图,它保持不变:

2014-05-24
2010-10-28


我必须按f5键才能看到预期的更改:

24/05/2014
28/10/2010


如何收听模型中的更改以更新过滤器?

最佳答案

userDate格式在功能userDateFilter中捕获。如果用户首选项更改,则不会更改。您想要的是在执行过滤器时获取用户日期格式。尝试:

app.filter('userDate', function ($filter, userModel) {

  function userDateFilter (date) {
    return $filter('date')(date, userModel.getPreferences().dateFormat);
  };

  return userDateFilter;
});

10-01 10:24