如何在Angular表达式中将String解析为Int?


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 2014年

Answers:



78

我更喜欢使用角度滤镜。

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

那么您可以在dom中使用它:

{{'10'|num}}

这是一个小提琴

希望这对您有所帮助!


2
有用并且以AngularJs的方式。谢谢!
哈维尔·瓦兹克斯

1
非常好的解决方案!

如果您想按所要求的问题+1或-1,则不起作用。
陈敬韶


23

另一种选择是:

$scope.parseInt = parseInt;

然后,您可以按照自己的意愿进行操作:

{{parseInt(num_str)-1}}

这是因为角度表达式无权访问,而window只能访问scope

同样,使用数字过滤器,可以将表达式用括号括起来:

{{(num_str-1) | number}}

演示


1
内置的Angular | 在大多数情况下,使用数字过滤器是可行的方法。
布拉德·马丁


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 }}

请记住在模块文件中声明此Pipe为accessfull。


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);
});

0

并不是很好,但是很有趣:您可以-而不是+

{{num_str -- 1 }}

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app>
  {{'1'--1}}
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.