什么时候用真实数据调用ngModel的$ render()?
我正在编写一个与ngModel合作的指令。 如示例所示,我将控制器上的$ render函数设置为我的函数。
当代码初始化时,会调用两次,第一次使用$ modelValue和$ viewValue设置为NaN,然后第二次使用模型的实际值。
问题是,NaN是一个需要测试的熊。 函数isNaN()是毫无价值的,就我所见(它对[""]返回false,对[""] ["."]返回true),而Number.isNaN()并不被广泛支持。
有什么建议么?
我想出了一个关于如何测试NaN的问题的部分答案,但对我来说似乎仍然很尴尬。
在$modelValue和$viewValue的ngModel永远只能承担(除非特别指定)的值NaN在一开始-在链接时-和之前的任何$formatters , $render和$validators (按顺序)有机会跑。
换句话说,如果你要记录这些值的不同点,你会得到以下结果(假设ngModel变量设置为"foo" ):
link-time $formatters $render $validators
-----------------------------------------------------
$modelValue NaN "foo" "foo" "foo"
$viewValue NaN NaN "foo" "foo"
演示
换言之,除非您需要在link访问ngModel ,否则无需防范NaN 。 此外,也没有双重调用 - ngModel管道每次更改运行一次。
鉴于你引用了评论中的例子,我猜你在$render函数中看到NaN ,因为你在链接时手动调用$render 。
