Подтвердить что ты не робот

AngularJS: 0 == 2?

Я почесываю голову здесь. Я использую angularJS и пытаюсь использовать выражение, содержащее вызов parseInt.

{{0 == 2}}  

... выводит false, как ожидалось.)

Однако, когда я пытаюсь:

{{parseInt(0) == parseInt(2)}} 

... печатает... true!

Как это возможно?

4b9b3361

Ответ 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

Ответ 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;

ссылка здесь