我创建了一个自定义过滤器,这是我的测试视图来探测它:
<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()陷阱。