Як я можу проаналізувати String на Int у виразі Angular?


75

Числовий рядок '5'

var num_str = '5';

Як я можу проаналізувати і дозволити одночасно виправити відповіді нижче?

{{num_str + 1}}  // 6
{{num_str - 1}}  // 4

parseInt не може використовуватися у виразі Angular,

{{parseInt(num_str) - 1}}    

числовий фільтр не може додати і мінус,

{{num_str - 1 | number}}

Якщо хтось має корисну пропозицію, я буду дуже вдячний вам


2
Схоже на те, що вам потрібен спеціальний фільтр, їх досить просто написати просто функцію, яка приймає вхідні дані і повертає вихідні дані.
shaunhusain

Відповіді:



78

Я вважаю за краще використовувати кутовий фільтр.

app.filter('num', function() {
    return function(input) {
      return parseInt(input, 10);
    };
});

тоді ви можете використовувати це в dom:

{{'10'|num}}

Ось скрипка .

Сподіваюся, це допомогло!


2
Корисно і по-ангельськи. Дякую!
Хав'єр Васкес,

1
дуже гарне рішення!
Кен

Не працює, якщо ви хочете поставити +1 або -1 відповідно до запитання.
Jingshao Chen

58

Ви можете спробувати:

{{ 1 * num_str + 1 }}

http://jsfiddle.net/Z32fP/


8
Будь ласка, ніколи не додавайте подібні маленькі хакі в справжню базу коду.
AlienWebguy

Це не буде працювати, якщо число в тисячах, а в рядку є кома. Це може перетворити 1000 на число, але не в 1000
discodane

Я погоджуюсь, що це хакерство, але це виглядає як єдине діюче рішення
Мохіт Канвар

23

Іншим варіантом буде:

$scope.parseInt = parseInt;

Тоді ви могли зробити це так, як хотіли:

{{parseInt(num_str)-1}}

Це тому, що кутові вирази не мають доступу до window, лише доscope .

Крім того, з числовим фільтром працює загортання виразу в дужки:

{{(num_str-1) | number}}

ДЕМО


1
Кутовий вбудований | числовий фільтр - це шлях у більшості випадків.
Brad Martin

15
{{ num_str - 0 }}

... працює для мене.


1
Геніальне рішення. Коли num_str = '' Нульовий рядок, це все ще працює. Я думав, що отримаю NaN, але працює чудово!
Олівер

11

Жодне з перерахованого не працювало для мене.

Але це зробило:

{{ (num1_str * 1) + (num2_str * 1) }}


2

Окрім {{1 * num_str + 1}} Ви також можете спробувати так (спочатку мінус):

{{ num_str - 0 + 1}}

Але це дуже тендітно, якщо num_str містить літери, тоді він не вдасться. Тому краще спробувати написати фільтр, як сказав @hassassin, або попередньо обробити дані відразу після його ініціювання.


1

Ви можете створити трубу і використовувати її де завгодно у вашій системі.

import { Pipe, PipeTransform } from '@angular/core';
 @Pipe({
     // tslint:disable-next-line:pipe-naming
     name: 'toNumber',
     pure: false }) export class ToNumberPipe implements PipeTransform { 
     public transform(items: any): any {
         if (!items) {
             return 0;
         }
         return parseInt(items, 10);
     } }

У HTML

{{ attr.text | toNumber }}

Не забудьте оголосити цю трубу доступною у файлі ваших модулів.


0

Я спробував згадані вище рішення, і жодне з них не працювало для мене. Я використовував JSON.parse, і це спрацювало:

$http.get('/api/getAdPolling')
  .success(function (data) {
    console.log('success: ' + data.length);

    if (JSON.stringify(data) != "not found") {
        $scope.adPoll = JSON.parse(data);
    }
})
  .error(function (data) {
    console.log('Error: ' + data);
});

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.