什么时候使用真实数据调用ngModel的$ render()?

时间:2015-05-18 22:44:30

标签: angularjs nan

我正在编写与ngModel合作的指令。如示例所示,我将控制器上的$ render函数设置为我的函数。

当代码初始化时,它会被调用两次,第一次将$ modelValue和$ viewValue设置为NaN,然后​​第二次使用模型的实际值。

问题是,NaN是一只值得测试的熊。功能isNaN()毫无价值,据我所知([""]返回false,["."]则返回true),Number.isNaN()没有得到广泛支持。

有什么建议吗?

2 个答案:

答案 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"

Demo

简而言之,除非您需要在"foo"时间访问ngModel,否则无需警惕link。此外,也没有双重调用 - NaN管道每次更改运行一次。

鉴于example you cite in comments我猜你在ngModel函数中看到NaN,因为你在链接时手动调用了$render