如何在 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 绑定
如何在 Angular 1.5 中将 Angular 组件与 ui.bootstrap.modal 一起使用?