Когда вызывается $render() ngModel с реальными данными?

Я пишу директиву для сотрудничества с ngModel. Как показано в примере, я задал функцию $render на контроллере для моей функции.

Когда код инициализируется, он вызывается дважды, первый раз с $modelValue и $viewValue устанавливается на NaN, а затем второй раз с фактическим значением модели.

Проблема заключается в том, что NaN - медведь, которому нужно испытать. Функция isNaN() бесполезна, насколько я могу видеть (она возвращает false для [""], но true для ["."]) и Number.isNaN() не поддерживается широко.

Любые предложения?

Ответ 1

Я придумал частичный ответ на мой вопрос о как проверить для NaN, но мне все еще кажется неудобным.

Ответ 2

$modelValue и $viewValue of ngModel только предполагают (если специально не назначено) значение NaN в самом начале - во время соединения - и перед любыми $formatters, $render и $validators (в этом порядке) имел шанс запустить.

Другими словами, если вы должны были регистрировать в разных точках эти значения, вы получили бы следующее (если для переменной ngModel установлено значение "foo"):

              link-time    $formatters     $render     $validators
              -----------------------------------------------------
$modelValue     NaN           "foo"         "foo"         "foo"
$viewValue      NaN            NaN          "foo"         "foo"

Демо

В словах, если вам не нужен доступ к ngModel в link -time, нет необходимости защищать от NaN. Более того, также нет двойного вызова - труба ngModel запускается один раз за изменение.

Учитывая пример, который вы цитируете в комментариях, я предполагаю, что вы видите NaN в функции $render, потому что вы вручную вызываете $render во время соединения.