Angular Filter在模型更新后不会更新视图



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

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

这是基于Angulars过滤器,并根据他自己的喜好设置用户日期格式:

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;
});

您如何更改模型?我:n在某些情况下,您需要将其包裹在Angular $ timeout()中,以使下一个周期发生。尝试避免$ apply()陷阱。

最新更新