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