Angular $ formatters和$ parsers voodoo joojoo

时间:2014-12-04 15:15:41

标签: javascript angularjs angularjs-directive

我真的不完全明白这些事情是如何运作的。文档很清楚,可以得到一般的想法,但我无法弄清楚它们是如何被调用的。

我有这个问题,我有一个Unix时间戳(以秒为单位),需要在UI中显示为可读日期,但是以原始格式保存到服务器。以前我使用的是jQuery UI datepicker,并使用$ formatters和$ parsers创建了一个自定义指令来处理转换。工作得很好。

然后我决定抛弃jQuery以减轻应用程序的负载,因此切换到使用ngQuickDate(https://github.com/adamalbrecht/ngQuickDate),这实际上很棒。

但它有自己的$ formatters和$ parsers管道,并且依赖于驻留在模型中的js Date对象。 :P

我整天都在试着弄清楚我的指令是否可以与其他指令相配得很好。按理说我应该可以将我的指令放在那里并让我的解析和格式化函数注入管道并按预期工作,除了日期选择器指令在几个地方直接引用$ modelValue,因此实际上绕过了管道据我所知。

有没有办法引用我的格式化程序转换的值,而不是直接的modelValue?我尝试了viewValue但是没有用。 :P

我真的不明白如何调用格式化程序和解析器。这是我的主要问题。

1 个答案:

答案 0 :(得分:1)

我上面提到this question但是tl; dr是:

  • $ Formatters 会更改 $ modelValue 的显示方式 $ viewValue
  • $ Parsers 验证您的 $ viewValue 是否已保存为 $ modelValue

此外,每当 $ modelValue 更改时,都会调用 $ formatters ,以将 $ modelValue 转换为 $ viewValue

因此,基本上 $ formatters 格式视图绑定值,而 $ parsers 验证数据绑定值。 $ formatters $ parsers 都是具有一系列函数的属性,这些函数按照它们的推送顺序应用()&d; dd或unshift()&#39 ; d到堆栈上。

希望这有助于您了解 $ formatters $ parsers