什么时候用真实数据调用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
。