Почему {{isNan (x)}} не работает в angularJS?
Обратите внимание, что заголовок этого вопроса изменился на тот, который больше сфокусирован на точной проблеме. См. Поток комментариев, чтобы следить за тем, как я понял, что проблема заключается в том, что AngularJS, похоже, не обрабатывает {{isNaN()}}
В моем HTML есть следующее:
xx {{ option.selectedSubject }} yy {{ (option.selectedSubject == null) }} zz
и я также попытался:
xx {{ option.selectedSubject }} yy {{ option.selectedSubject == null }} z
и
xx {{ option.selectedSubject }} yy {{ option.selectedSubject === null }} zz
Может кто-нибудь объяснить мне, почему я получаю следующее для каждого из вышеперечисленных при просмотре моей страницы:
xx null yy false zz
Обновление 1 Я пробовал следующее:
aa {{ option.selectedSubject === "null" }} bb {{ option.selectedSubject == "null" }} cc
и он дает следующее:
aa false bb false cc
Обновление 2 Я не уверен, что это помогает, но вот что заполняет значения option.selectedSubject. В этом случае в локальном хранилище ничего нет:
$scope.option.selectedSubject = parseInt(localStorage.get('selectedSubject'));
Когда я проверяю значение $scope.option.selectedSubject, оно NaN
Ответы
Ответ 1
Проблема здесь не isNaN. Проблема в том, что вы вызываете функцию в переменной $scope, которая не существует.
Каждая интерполированная часть текста ('{{text}}') связана с переменной $scope и оценивается с этой переменной области $scope.
Чтобы облегчить вам задачу, $scope.property может быть создан "на лету", если он не существует. Каждый раз, когда вы используете ngModel = 'someProperty' или {{aPropertyName}}, тогда corressponding $scope.someProperty или $scope.aPropertyName создается автоматически, если он еще не существует. Однако этот ярлык работает только с примитивами.
Функциональные вызовы всегда оцениваются по $scope и никогда не создаются. Вот почему вы должны сказать $scope.isNaN = isNaN, как вы нашли в своем предыдущем комментарии.
Попробуйте использовать любую функцию. isArray, isNumber и т.д. Это не сработает, если вы не поставили объект $scope.functionName = functionName в контроллере.
Edit: Кроме того, если вы действительно хотите выполнить тест isNaN прямо в интерполяции, вы можете воспользоваться системой типа javascript и использовать
{{ property != property }}
Но это плохая форма...
http://plnkr.co/edit/wfLqzk8QxScsJPF5qY12?p=preview
Ответ 2
Изменить: Исходный вопрос: Могу ли я пройти тест внутри {{}} в angularJS?, а $scope.option.selectedSubject
должен быть null
, а не NaN
. Автору должен быть открыт другой вопрос, а не менять его на совершенно другой.
Ответ на исходный вопрос:
Вы можете поместить выражение внутри своей привязки, поэтому вы можете проверить {{option.selectedSubject == null}}. Проверьте свою область действия, если результат оценки не соответствует ожидаемому.