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

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

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

问题是,NaN是一个需要测试的熊。 函数isNaN()是毫无价值的,就我所见(它对[""]返回false,对[""] ["."]返回true),而Number.isNaN()并不被广泛支持。

有什么建议么?


我想出了一个关于如何测试NaN的问题的部分答案,但对我来说似乎仍然很尴尬。


$modelValue$viewValuengModel永远只能承担(除非特别指定)的值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

链接地址: http://www.djcxy.com/p/77927.html

上一篇: When is $render() of ngModel called with real data?

下一篇: Difference between modelValue and viewValue