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

Posted

技术标签:

【中文标题】如何在 Angular 表达式中将 String 解析为 Int?【英文标题】:How can I parse String to Int in an Angular expression? 【发布时间】:2014-02-19 07:43:55 【问题描述】:

一个数字字符串'5'

var num_str = '5';

我怎样才能同时解析并让下面的答案正确?

num_str + 1  // 6
num_str - 1  // 4

parseInt 不能用于 Angular 表达式,

parseInt(num_str) - 1    

数字过滤器不能做加减,

num_str - 1 | number

如果有人有有用的建议,我将非常感谢你

【问题讨论】:

听起来你想要一个自定义过滤器,它们很容易编写一个接受输入并返回输出的函数。 【参考方案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 

记得在你的模块文件中声明这个管道是可访问的。

【讨论】:

【参考方案2】:

不是很好,而是一个有趣的 hack: 您可以 -- 而不是 +

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>

【讨论】:

【参考方案3】:
 num_str - 0 

...为我工作。

【讨论】:

天才解决方案。当 num_str = '' Null 字符串时,这仍然有效。我以为我会得到一个 NaN,但效果很棒! 不错的解决方案。适用于空字符串和空白字符串;这只是 javascript 行为,因此它应该永久有效。仅获取未定义的 NaN 或字符串不是有效数字。【参考方案4】:

我更喜欢使用角度滤镜。

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

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

'10'|num

这是fiddle。

希望这有帮助!

【讨论】:

有用并且以 AngularJs 的方式。谢谢! 非常好的解决方案! 如果您想按照问题要求 +1 或 -1,则不起作用。【参考方案5】:

我尝试了上面提到的解决方案,但没有一个对我有用。我使用了 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);
);

【讨论】:

【参考方案6】:

以上都不适合我。

但是这样做了:

 (num1_str * 1) + (num2_str * 1) 

【讨论】:

【参考方案7】:

另一种选择是:

$scope.parseInt = parseInt;

然后你可以按照你的意愿去做:

parseInt(num_str)-1

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

此外,使用数字过滤器,将表达式括在括号中也可以:

(num_str-1) | number

DEMO

【讨论】:

Angular 内置 |在大多数情况下,数字过滤器是要走的路。【参考方案8】:

在您的控制器中:

$scope.num_str = parseInt(num_str, 10);  // parseInt with radix

【讨论】:

请记住在 javascript 中始终为 parseInt ***.com/questions/850341/… 指定基数【参考方案9】:

除了 1 * num_str + 1 你也可以这样尝试(减号):

 num_str - 0 + 1

但是它非常脆弱,如果 num_str 包含字母,那么它会失败。所以最好尝试像@hassassin 所说的那样编写一个过滤器,或者在启动它之后立即对数据进行预处理。

【讨论】:

【参考方案10】:

你可以试试:

 1 * num_str + 1 

http://jsfiddle.net/Z32fP/

【讨论】:

请不要在真正的代码库中添加这样的小技巧。 如果数字是千位并且字符串中有逗号,这将不起作用。这可以把 1000 变成一个数字,但不是 1,000 我同意这是一个 hack,但这看起来是唯一可行的解​​决方案【参考方案11】:

您可以使用javascript Number 方法将其解析为数字,

var num=Number (num_str);

【讨论】:

投反对票,因为这是关于 angularjs 的讨论,而不是纯 javascript。

以上是关于如何在 Angular 表达式中将 String 解析为 Int?的主要内容,如果未能解决你的问题,请参考以下文章

使用打字稿在 Angular 2 中将接口与 html 绑定

如何在Word中将http请求响应映射到我定义的对象

如何在 Angular 1.5 中将 Angular 组件与 ui.bootstrap.modal 一起使用?

如何在 Angular 2 中将 SASS 用于组件样式?

如何在 Angular 中将 i18n 模板用于 eslint?

如何在 Angular 2 中将对象传递给 NgStyle 指令?