Ответ 1
Я придумал частичный ответ на мой вопрос о как проверить для NaN, но мне все еще кажется неудобным.
Я пишу директиву для сотрудничества с ngModel. Как показано в примере, я задал функцию $render на контроллере для моей функции.
Когда код инициализируется, он вызывается дважды, первый раз с $modelValue и $viewValue устанавливается на NaN, а затем второй раз с фактическим значением модели.
Проблема заключается в том, что NaN - медведь, которому нужно испытать. Функция isNaN()
бесполезна, насколько я могу видеть (она возвращает false для [""]
, но true для ["."]
) и Number.isNaN()
не поддерживается широко.
Любые предложения?
Я придумал частичный ответ на мой вопрос о как проверить для NaN, но мне все еще кажется неудобным.
$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
во время соединения.