Angularjs:当某些设置发生变化时,如何“重新运行”$ formatter?

时间:2014-07-02 13:53:07

标签: angularjs

日期格式设置在范围内。

过滤器使用它来显示标签中的日期,并通过指令将 $ formatters 中的函数从 ngModel 添加到输入格式化日期。

当范围中的格式设置更改时,通过过滤器显示的日期将以角度进行刷新。

但不是通过$ formatters的输入字段。

强制刷新我们发现的唯一方法是将所有字段设置为null,然后在$ timeout中将它们重置为要显示的值以强制重新执行$ formatters。

有更好的方法吗?

答案:

通过合并Sergey Moiseev的回答并回答11380866,我能够为该指令添加令人满意的解决方案。

将设置存储在rootscope中(因为它在solated范围内的批量指令中使用)并通过通用代码对其作出反应:

$rootScope.$watch('userSettings.dateFormat.fmt', function (newVal, oldVal, scope) {
                if (newVal != oldVal) {
                    var viewValue = ngModelCtrl.$modelValue;
                    for (var i in ngModelCtrl.$formatters) {
                        viewValue = ngModelCtrl.$formatters[i](viewValue);
                    }
                    ngModelCtrl.$viewValue = viewValue;
                    ngModelCtrl.$render();
                }
            });

谢谢!

0 个答案:

没有答案