2013-11-21 3 views
3

У меня есть следующие 2 выражения в моем HTML (как параметры для функции контроллера называется в директиве ngClick), где я пытаюсь реализовать простую функциональность подкачки:AngularJS Expression конкатенации Вместо добавления

{{ (currentPage|number)+(1|number) }} - Это объединяет два значения вместе, как если бы они были строкой.

{{ (currentPage|number)-(1|number) }} - Это вычисляет правильный и ожидаемый числовой результат.

Любая идея, в чем проблема? Я пробовал различные способы добавить литерал и значение AngularJS вместе безрезультатно. Я использую версию 1.2.0.

Заранее благодарен!

+3

Поскольку '+' - оператор сложения и конкатенации, то конкатенация имеет приоритет, тогда как '-' является только вычитанием. Попробуйте использовать 'parseInt()' везде, где вы вычисляете числовое значение или внутри выражения. – SamV

+0

Это сработало - спасибо! –

+0

Я представил его как ответ, чтобы закрыть этот вопрос. – SamV

ответ

1

Поскольку + является дополнением и конкатенации Оператор конкатенации принимает приоритет, тогда как - только вычитание. Попробуйте использовать parseInt() везде, где вы вычисляете числовое значение или внутри выражения.

представил, как он работал

0

Как видно из docs, числовой фильтр возвращает строку. Оператор + представляет собой операцию конкатенации в String.

Вы должны разобрать строку в номер самостоятельно.

Нечто подобное:

.filter('toNumber', function() { 
    return function(n) { 
     return new Number(n); 
    }; 
}); 
1

Я попытался parseFloat(), но по какой-то причине, что не работает. Но поскольку использование - будет по умолчанию для математической операции, вместо добавления (+) я вычитал отрицательный.

$scope.add = function() {$scope.counter += $scope.amount;} // doesn't work 

    $scope.add = function() {$scope.counter -= -$scope.amount;} // works perfectly. 
1

вы можете просто сделать так:

{{ (currentPage|number)-(-1|number) }} instead of {{ (currentPage|number)+(1|number) }} 
2

В некоторых крайних случаях, как у меня, где ни один из перечисленных выше решений не работают, есть один спаситель решение: вычитаем 0, а затем выполнить сложение.

Таким образом ваше выражение добавление

{{ (currentPage|number)+(1|number) }}

может быть переписана в виде

{{ (currentPage|number) - 0 +(1|number) }}

Для дальнейшего объяснения, выражение принудительно представилось в виде числа с помощью вычитания 0.

Смежные вопросы