AngularJS: 0 == 2?
Я почесываю голову здесь. Я использую angularJS и пытаюсь использовать выражение, содержащее вызов parseInt.
{{0 == 2}}
... выводит false, как ожидалось.)
Однако, когда я пытаюсь:
{{parseInt(0) == parseInt(2)}}
... печатает... true!
Как это возможно?
Ответы
Ответ 1
Angular не использует JavaScript eval()
для оценки выражений. Вместо этого службы Angular $parse
обрабатывают эти выражения.
Angular выражения не имеют доступа к глобальным переменным типа window
, document
или location
. Это ограничение является преднамеренным. Это предотвращает случайный доступ к глобальному государству - общий источник тонкие ошибки.
Обратитесь
В вашем html
Оба parseInt(0)
и parseInt(2)
являются undefined в вашем html.
So {{undefined==undefined}}
is true
.Beacause parseInt
- это функция Javascript
. Вы не можете получить доступ к функции parseInt
в стороне {{}}
. [Здесь parseInt не является переменной области видимости]
Решение
Если вы хотите сделать это,
определите parseInt
в вашем контроллере,
$scope.parseInt = parseInt;
Затем вы можете использовать метод parseInt
в своем html
Ответ 2
Это потому, что parseInt
не определено в вашей области.
http://jsfiddle.net/halirgb/Lvc0u55v/
Ответ 3
Вы не можете выполнить обычный JS в выражении angular. Ваши выражения будут оцениваться в соответствии с текущей областью. Итак, parseInt
- undefined
в текущей области.
Если вы установите parseInt
как ссылку на функцию, она будет работать.
$scope.parseInt = parseInt;
Ответ 4
Это связано с тем, что представление прикреплено к контроллеру с помощью области.
Таким образом, независимо от того, что мы пишем в представлении, либо переменную, либо функцию, либо все, что она отображала, добавляя перед ним $scope.
например.
a отображается как $scope.a в представлении
Итак, когда мы пишем parseInt, его визуализирует $scope.parseInt, который не определен.
FIX - определить $scope.parseInt = parseInt в контроллере, прикрепленном к определенному виду
Ответ 5
Вы сравниваете значения undefined, поэтому результат будет true.
Вы не можете вызвать javascript-метод (parseInt) с помощью директив angular (ng-blur, ng-change,..), которые вы можете достичь, выполнив angular функции.
Решение 1:
{{0*1 == 2*1}}
Просто сделайте трюк, чтобы преобразовать в Integer, умножьте на 1 (0 * 1 = 0, 2 * 1 = 1).
Решение 2:
{{parseInt(0) == parseInt(2)}}
Контроллер:
// To Convert specific format
$scope.parseInt = funtion(value){
return parseInt(value,10);
}
или
$scope.parseInt = parseInt;
ссылка здесь